#include <stdio.h>
#define MAX_DIGITS 1000
void p(int a[], int* b, int n) {
int c = 0;
for (int i = 0; i < *b; i++) {
int rest = a[i] * n + c;
a[i] = rest % 10;
c = rest / 10;
}
while (c) {
a[*b] = c % 10;
c /= 10;
(*b)++;
}
}
void p1(int a[], int* a_len, int b[], int b_len) {
int c = 0;
int max_len = (*a_len > b_len) ? *a_len : b_len;
for (int i = 0; i < max_len; i++) {
int sum = c;
if (i < *a_len) sum+=a[i];
if (i < b_len) sum += b[i];
if (i < *a_len) {
a[i] = sum % 10;
}
else {
a[i] = sum % 10;
}
c = sum / 10;
}
if (c) {
a[max_len] = c % 10;
(*a_len) = max_len + 1;
}
else {
(*a_len) = max_len;
}
}
int main() {
int n;
printf("请输入 n: ");
scanf_s("%d", &n);
int sum[MAX_DIGITS] = { 0 };
int sum_len = 1;
int factorial[MAX_DIGITS] = { 1 };
int factorial_len = 1;
for (int i = 1; i <= n; i++) {
p(factorial, &factorial_len, i);
p1(sum, &sum_len, factorial, factorial_len);
}
for (int i = sum_len - 1; i >= 0; i--) {
printf("%d", sum[i]);
}
return 0;
}