64 lines
1.3 KiB
C++
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;
|
|
} |