思路:每次纪录阶乘,求下一次阶乘时直接乘以上一次阶乘。
#include<bits/stdc++.h>
using namespace std;
int a[2000]={0},s[2000]={0};
int main(){
int n,h;
cin>>n;
s[0]=1;
for(int i=1;i<=n;i++){
int num=0,j;
for(j=0;j<=h;j++){
s[j]*=i;
s[j]+=num;
num=s[j]/10;
s[j]%=10;
}
if(num!=0){
s[j]+=num;
}else{
j--;
}
h=j;
for(int k=0;k<=j;k++){
a[k]+=s[k];
a[k+1]+=a[k]/10;
a[k]%=10;
}
}
for(int i=h;i>=0;i--){
cout<<a[i];
}
return 0;
}