爆0求助
查看原帖
爆0求助
1280199
zqh_7plus楼主2024/8/28 22:44

rt,以下是我的代码,本人之前没学过高精,恳请指点

#include<bits/stdc++.h>
using namespace std;
const int pp=5e6+7;
int s[pp],x[pp],ans[pp],c[pp],n;
int main( ){
	cin>>n;
	ans[1]=1;
	int xlen=1;
	x[1]=1;
	for(int i=2;i<=n;i++){
		int xx=i,cnt=0;
		while(xx){
			s[++cnt]=xx%10;
			xx/=10;
		}
		int slen=cnt;
		for(int l=1;l<=xlen;l++){
			for(int r=1;r<=slen;r++){
				c[l+r-1]=x[l]*s[r];
				c[l+r]+=c[l+r-1]/10;
				c[l+r-1]%=10;
			}
		}
		int k;
		for(k=10000;k>=1&&c[k]==0;k--);
		int clen=k;
		for(k=10000;k>=1&&ans[k]==0;k--);
		int anslen=k;
		//printf("q%d %dq",anslen,clen);
		for(int i=1;i<=max(anslen,clen);i++){
			ans[i]=ans[i]+c[i];
			ans[i+1]+=ans[i]/10;
			ans[i]%=10;
		}
		for(int i=1;i<=clen;i++){
			x[i]=c[i];
		}
		xlen=clen;
		memset(c,0,sizeof(c));
		/*
		cout<<endl;
		for(k=100;k>=1&&ans[k]==0;k--);
		for(k;k>=1;k--){
			cout<<ans[k];
		}
		*/
	}
	int k;
	for(k=10000;k>=1&&ans[k]==0;k--);
	for(k;k>=1;k--){
		cout<<ans[k];
	}
}
2024/8/28 22:44
加载中...