#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 sum[N] = {0}, sum_len = 1; int fact[N] = {1}, fact_len = 1; for (int i = 1; i <= n; i++) { // 计算当前阶乘 i! = (i-1)! * i int num = i; int temp[N] = {0}, temp_len = 0; while (num) { temp[temp_len++] = num % 10; num /= 10; } mul(fact, fact_len, temp, temp_len); // 将阶乘结果加到总和中 add(sum, sum_len, fact, fact_len); } for (int i = sum_len - 1; i >= 0; i--) { cout << sum[i]; } cout << endl; return 0; }