我感觉这是最长的题解了,有大佬能优化一下吗
查看原帖
我感觉这是最长的题解了,有大佬能优化一下吗
1067401
huangtianzeC楼主2024/1/22 20:39
#include<iostream>
#include<cstring>
using namespace std;
string che(string s1,string s2){
	int a[1005]={},b[1005]={},ans[3005]={};
	string s3="";
	int lena=s1.size(),lenb=s2.size();
	for(int i=0;i<lena;++i) a[i]=s1[lena-i-1]-'0';
	for(int i=0;i<lenb;++i) b[i]=s2[lenb-i-1]-'0';
	int lenc=lena+lenb;
	for(int i=0;i<lena;++i){
		for(int j=0;j<lenb;++j){
			ans[i+j]+=a[i]*b[j];
			ans[i+j+1]+=ans[i+j]/10;
			ans[i+j]=ans[i+j]%10;
		}
	}
	int t=lenc;
	while(ans[t]==0&&t>0) t--;
	for(int i=t;i>=0;--i) s3+=ans[i]+'0';
	return s3;
}
string jia(string a1,string b1){
	int a[1005]={},b[1005]={},c[3005]={};
	string c1="";
	int lena=a1.size();
    int lenb=b1.size();
    for(int i=0;i<lena;++i) a[i]=a1[lena-1-i]-'0';
    for(int i=0;i<lenb;++i) b[i]=b1[lenb-1-i]-'0';
    int lenc=max(lena,lenb);
    for(int i=0;i<lenc;++i){
        c[i]+=a[i]+b[i];
        if(c[i]>9){
            c[i+1]++;
            c[i]=c[i]%10;
        }
    }
    if(c[lenc]) c1+=c[lenc]+'0';
    for(int i=lenc-1;i>=0;--i) c1+=c[i]+'0';
    return c1;
}
int main(){
	string s1,ans="0";
	cin>>s1;
	if(s1.size()==1) s1='0'+s1;
	int n=(s1[0]-'0')*10+(s1[1]-'0');
	for(int i=1;i<=n;++i){
		string tmp="1";
		for(int j=1;j<=i;++j){
			string s3;
			s3+=(j/10%10+'0');
			s3+=(j%10+'0');
			if(s3[0]=='0') s3=s3[1];
			tmp=che(tmp,s3);
		}
		ans=jia(ans,tmp);
	}
	cout<<ans;
	return 0;
}
2024/1/22 20:39
加载中...