Files
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

64 lines
1.3 KiB
C++

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1000;
int a[N], b[N];
int al, bl;
void add(int a[], int &al, int b[], int &bl) {
int t = 0;
al = max(al, bl);
for (int i = 0; i < al; i++) {
t += a[i] + b[i];
a[i] = t % 10;
t /= 10;
}
if (t) a[al++] = 1;
while (al > 1 && a[al-1] == 0) al--;
}
void mul(int a[], int &al, int b[], int &bl) {
int t = 0;
int c[N] = {0};
for (int i = 0; i < al; i++)
for (int j = 0; j < bl; j++)
c[i + j] += a[i] * b[j];
al += bl;
for (int i = 0; i < al; i++) {
t += c[i];
a[i] = t % 10;
t /= 10;
}
while (al > 1 && a[al-1] == 0) al--;
}
int main() {
int n;
cin >> n;
int s[N] = {0}, sl = 1;
int f[N] = {1}, fl = 1;
for (int i = 1; i <= n; i++) {
// 计算当前阶乘 i! = (i-1)! * i
int num = i;
int t[N] = {0}, tl = 0;
while (num) {//101!=101*100*...
t[tl++] = num % 10;
num /= 10;
}
mul(f, fl, t, tl);
// 将阶乘结果加到总和中
add(s, sl, f, fl);
}
for (int i = sl - 1; i >= 0; i--)
cout << s[i];
cout << endl;
return 0;
}