1 条题解

  • 1
    @ 2024-8-11 23:13:57

    很经典的高精度加法问题,不难但值得一练

    #include<bits/stdc++.h>
    using namespace std;
    int a[9990],b[9990],c[9990],ans[9990],cda,cdb,cdc,cdans;//cdxx是指xx的长度
    void jia()//将a+b的结果存到c中
    {
    	int x=1,n=0,i,j;
    	
    	for(i=1;i<=max(cda,cdb);i++)
    	{
    		c[i]=a[i]+b[i]+n;
    		if(n!=0) n=0;
    		if(c[i]>=10)
    			{
    				c[i]-=10;
    				n++;
    			}
    	}
    	if(n==1) {c[max(cda,cdb)+1]=1;cdc++;}
    }
    void jiaans()//将c+ans的结果存在ans中
    {
    	int x=1,n=0,i,j;
    	
    	for(i=1;i<=max(cdc,cdans);i++)
    	{
    		ans[i]=ans[i]+c[i]+n;
    		if(n!=0) n=0;
    		if(ans[i]>=10)
    			{
    				ans[i]-=10;
    				n++;
    			}
    	}
    	if(n==1) {ans[max(cdc,cdans)+1]=1;cdans++;}
    }
    int main()
    {
    	freopen("fbnq.in","r",stdin);
    freopen("fbnq.out","w",stdout);
    	int z;
    	cin>>z;
    	if(z==1){
    		cout<<1;
    		return 0;
    	}
    	if(z==2){
    		cout<<2;
    		return 0;
    	}
    	a[1]=1;
    	b[1]=1;
    	ans[1]=2;
    	
    	cda=1;
    	cdb=1;
    	cdc=1;
    	cdans=1;
    	for(int I=3;I<=z;I++)
    	{
    		jia();
    		jiaans();
    		cda=cdb;
    		cdb=cdc;
    		for(int II=1;II<=cda;II++)
    		a[II]=b[II];
    		for(int II=1;II<=cdb;II++)
    		b[II]=c[II];//b存到a c存到b 实现循环
    	}
    		for(int II=cdans;II>=1;II--)
    		cout<<ans[II];
    }
    
    
    
    
    • 1

    信息

    ID
    494
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    175
    已通过
    33
    上传者