#include #include 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; }