模板 来源https://societyniu.blog.luogu.org/solution-p1009
#include<iostream> #include<bits/stdc++.h> using namespace std; int a[2000]; int b[2000]; int c[2000]; int sum[2000]; void pplus(int *a,int *c) { int jw=0; for(int i=1;i<=1000;i++) { c[i]+=a[i]+jw; jw=c[i]/10; c[i]%=10; } } void cheng(int *a,int c) { int jw=0; for(int i=1;i<=1000;i++) { a[i]=a[i]*c+jw; jw=a[i]/10; a[i]%=10; } } int main() { int n; cin>>n; a[1]=1; for(int i=1;i<=n;i++) { cheng(a,i); pplus(a,c); } bool flag=0; for(int i=1000;i>=1;i--) { if(c[i]!=0) flag=1; if(flag) cout<<c[i]; } }
自己写的辣鸡代码
#include <bits/stdc++.h> #define RG register int #define rep(i,a,b) for(RG i=a;i<=b;++i) #define per(i,a,b) for(RG i=a;i>=b;--i) #define ll long long #define inf (1<<29) using namespace std; const int maxn=1e5+5; int a[51][maxn],vis[maxn],mins=1e9,p[52]={1},maxp=1; int n,flag,coun; inline int read(){ int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } inline void count(int n){ memset(a[n],0,sizeof(a[n])); a[n][0]=120; for(int i=6;i<=n;i++) { for(int j=0;j<maxn;j++) { a[n][j]*=i; if(!a[n][j+1])break; //cout<<a[j]<<endl; } if(i%5==0 || i>45) { for(int j=0;j<maxn;j++) if(a[n][j]!=0){ if(a[n][j]%10!=0) { a[n][j+1]+=a[n][j]/10; a[n][j]=a[n][j]%10; //cout<<1<<endl; } else { a[n][j+1]+=a[n][j]/10-1; a[n][j]=10; } } } } //cout<<a[0]<<endl; for(int i=0;i<maxn;i++) { a[n][i+1]+=a[n][i]/10; a[n][i]=a[n][i]%10; if(!a[n][i+1])break; p[n]=i+1; //cout<<a[i]<<' '<<a[i+1]<<endl; } //if(!a[n][p[n]])p[n]--; maxp=max(maxp,p[n]); } int main() { int n,sum[maxn]={0};cin>>n; a[1][0]=1;a[2][0]=2;a[3][0]=6;a[4][0]=24;a[5][0]=120; for(int j=6;j<=n;j++)count(j); for(int i=0;i<=maxp;i++) for(int j=1;j<=n;j++) sum[i]+=a[j][i];//cout<<sum[i]<<endl; for(int i=0;i<maxn;i++) { sum[i+1]+=sum[i]/10; sum[i]=sum[i]%10; if(!sum[i+1])break; flag=i+1; } //while(!sum[flag])flag--; //for(int j=1;j<=n;j++){cout<<j<<' ';for(int i=0;i<=p[j];i++)cout<<a[j][p[j]-i];cout<<endl;} for(int i=0;i<=flag;i++)cout<<sum[flag-i]; return 0; }