0分
查看原帖
0分
1058217
wangyuzhe11楼主2024/12/16 22:33
#include<bits/stdc++.h>
using namespace std;
#define db=double;
string is(int a){
	string s="";
	while(a>0){
		int k=a%10;
		s=(char)(k+'0')+s;
		a/=10;
	}
	return s;
}
string ans="",ans2="";
void add(string a,string b){
	int s1=a.size(),s2=b.size();
	string k="";
	int l=0;
	if(s2>=s1){
		for(int i=s1-1;i>=0;i--){
			int m1=a[i]-'0',m2=b[i-(s1-s2)]-'0';
			int x=m1+m2+l;
			if(x<10){
				l=0;
				k=(char)(x+'0')+k;
			}else{
				l=1;
				x-=10;
				k=(char)(x+'0')+k;
			}
		}
		for(int i=s2-s1-1;i>=0;i--){
			int m=b[i]-'0';
			int x=m+l;
			if(x<10){
				l=0;
				k=(char)(x+'0')+k;
			}else{
				l=1;
				k=(char)((x-10)+'0')+k;
			}
		}
		if(l==1)k='1'+k;
	}
	else{
		for(int i=s2-1;i>=0;i--){
			int m1=a[i-(s2-s1)]-'0',m2=b[i]-'0';
			int x=m1+m2+l;
			if(x<10){
				l=0;
				k=(char)(x+'0')+k;
			}else{
				l=1;
				x-=10;
				k=(char)(x+'0')+k;
			}
		}
		for(int i=s1-s2-1;i>=0;i--){
			int m=a[i]-'0';
			int x=m+l;
			if(x<10){
				l=0;
				k=(char)(x+'0')+k;
			}else{
				l=1;
				k=(char)((x-10)+'0')+k;
			}
		}
		if(l==1)k='1'+k;
	}
	for(int i=0;i<k.size();i++)ans[i]=k[i];
}
void fx(string a,string b){
	int l=0;
	int s1=a.size(),s2=b.size();
	string s="";
	if(s1<s2){
		swap(s1,s2);
		swap(a,b);
	}
	for(int i=0;i<s2;i++){
		for(int j=s1-1;j>=0;j--){
			int k1=(int)(b[i]-'0')*(int)(a[i]-'0');
			char k=(char)(k1+'0');
			if(k<10){
				if(l!=0){
					l=0;
					s=(char)(k+l-'0')+s;
				}
				else{
					l=0;
					s=(char)(k-'0')+s;
				}
			}else{
				if(l!=0){
					l=k/10;
					k%=10;
					s=(char)(k+l-'0')+s;
				}else{
					l=k/10;
					k%=10;
					s=(char)(k-'0')+s;
				}
			}
		}
		add(s,ans2);
		ans2=ans;
	}
}
string x="";
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		string a="1";
		for(int j=1;j<=i;j++){
			fx(is(j),a);
			a=ans2;
		}
		add(a,x);
		x=ans;
	} 
	for(int i=0;i<x.size();i++)cout<<x[i];
	return 0;
}
2024/12/16 22:33
加载中...