25分求助
查看原帖
25分求助
740948
rb_tree楼主2023/11/18 18:15

rt

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
void r_zero(string &s)
{
    while(s[0]=='0') s.erase(0,1);
}
string hi(string A,string B)
{
    string C;
	int a[50000]={0},b[50000]={0},c[100000]={0},lenA,lenB,lenC;
	lenA=A.length(),lenB=B.length(),lenC=lenA+lenB;
	for(int i=1,j=lenA-1;j>=0;i++,j--) a[i]=A[j]^48;
	for(int i=1,j=lenB-1;j>=0;i++,j--) b[i]=B[j]^48;
	for(int i=1;i<=lenA;i++)
    {
		for(int j=1;j<=lenB;j++) c[i+j-1]+=a[i]*b[j];
    }
	for(int i=1;i<=lenC;i++)
    {
		c[i+1]+=c[i]/10;
		c[i]%=10;
	}
	while(!c[lenC] && lenC>1) lenC--;
	for(int i=lenC;i>=1;i--) C+=c[i]+'0';
	return C;	
}
string hi_plus(string a,string b)
{
    int na[50000]={},nb[50000]={},ans[50000]={},as=a.length(),bs=b.length();
    string rans;
    r_zero(a);
    r_zero(b);
    as=a.length();
    bs=b.length();
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    for(int i=as-1;i>=0;i--) na[i]=a[i]^48;
    for(int i=bs-1;i>=0;i--) nb[i]=b[i]^48;
    for(int i=max(as-1,bs-1);i>=0;i--) ans[i]=na[i]+nb[i];
    for(int i=0;i<max(as,bs);i++)
    {
        ans[i+1]+=ans[i]/10;
        ans[i]%=10;
    }
    for(int i=max(as-1,bs-1);i>=0;i--) rans+=ans[i]+'0';
    r_zero(rans);
    return rans;
}
string int_to_string(int x)
{
    string ans;
    while(x!=0)
    {
        int c;
        c=x%10;
        x/=10;
        ans+=c+'0';
    }
    return ans;
}
string jc(int x)
{
    if(x==0) return "1";
    string ans="1";
    for(int i=x;i>=1;i--) ans=hi(ans,int_to_string(i));
    return ans;
}
int main()
{
    int n;
    cin>>n;
    if(n==1)
    {
        printf("1");
        return 0;
    }
    if(n==0)
    {
        printf("1");
        return 0;
    }
    string ans="0";
    for(int i=1;i<=n;i++) ans=hi_plus(jc(i),ans);
    cout<<ans;
    return 0;
}
2023/11/18 18:15
加载中...