题目链接:https://www.luogu.org/problemnew/show/1009
#include <bits/stdc++.h>
using namespace std;
int n,a[2020],b[2020],sum[2020];
int main(){
scanf("%d",&n);
a[1010] = sum[1010] = 1;
for(int i = 2; i <= n; i ++){//模拟乘法
memset(b,0,sizeof(b));
int temp = i,cnt=0;
while(temp){
int t = temp % 10;
for(int j = 1010; j > cnt; j --){
int tmp = a[j] * t;
b[j-cnt] += (tmp % 10);
b[j-cnt-1] += tmp / 10 + b[j-cnt] / 10;
b[j-cnt] %= 10;
}
temp /= 10; cnt ++;
}
for(int j = 0; j < 2010; j ++) a[j] = b[j];
for(int j = 1010; j > 0; j --){
sum[j] += a[j];
sum[j-1] += sum[j] / 10;
sum[j] %= 10;
}
}
int flag = 0;
for(int i = 0; i <= 1010; i ++){
if(sum[i]) flag = 1;
if(flag) printf("%d",sum[i]);
}
printf("\n");
return 0;
}