题解 | #阶乘#
阶乘
https://www.nowcoder.com/practice/e58c8a55162d49c48115bdfa5da7da56
很多人说我前面一篇用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;
}
}
海康威视公司福利 1160人发布
