很多人说我前面一篇用python有点赖皮,这里我cpp实现一下。

我对cal_fac简单优化了一下,使用了记忆化的方式,减少重复计算。

#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
#define N 10000
vector<ll> fac(N, -1);

ll cal_fac(ll x) {
    ll& res = fac[x];
    if (x == 1) return res = 1;
    if (res != -1) return res;
    return res = x*cal_fac(x-1);
}

int main() {
    ll n;
    while (cin >> n) {
        ll p = n, m = n;
        if (n % 2 == 0) m--;
        if (n % 2 == 1) p--;
        ll y1 = 0, y2 = 0;
        for (int i = 1; i <= m; i += 2) {
            y1 += cal_fac(i);
        }
        for (int i = 2; i <= p; i += 2) {
            y2 += cal_fac(i);
        }
        cout << y1 << " " << y2 << endl;

    }
}