其他分享
首页 > 其他分享> > P1255

P1255

作者:互联网

大数加法常通过字符串处理

#include<stdio.h>
#include<string.h>
void bigadd(void);
char final[5007];
char temp[5007];
char bridge[5007];
int len;
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<5007;i++)
    final[i]='\0',temp[i]='\0',bridge[i]='\0';
    temp[0]='1';
    final[0]='2';
    if(n!=0&&n!=1)
    {
        for(int i=0;i<n-2;i++)
        bigadd();
        for(int i=0;i<len;i++)
        printf("%c",final[i]);
    }
    else if(n==0)
    printf("0");
    else if(n==1)
    printf("1");
    return 0;
}

void bigadd(void)
{
    int len1=strlen(temp);
    int len2=strlen(final);
    int a1[5007],b1[5007];
    int result[5007];
    for(int i=0;i<5007;i++)
    {
        result[i]=0;
        a1[i]=0;
        b1[i]=0;
    }
    for(int i=0;i<len2;i++)
    bridge[i]=final[i];
    //倒序存储(低位在前高位在后)
    for(int i=len1-1,j=0;i>=0;i--,j++)
    a1[i]=temp[j]-'0';
    for(int i=len2-1,j=0;i>=0;i--,j++)
    b1[i]=final[j]-'0';
    int judge=(len1>len2)?len1:len2;
    if(a1[0]+b1[0]<10)
    result[0]=a1[0]+b1[0];
    else
    {
        result[0]=a1[0]+b1[0]-10;
        result[1]=1;
    }
    for(int i=1;i<judge;i++)
    {
        if(a1[i]+b1[i]+result[i]<10)
        result[i]=a1[i]+b1[i]+result[i];
        else
        {
            result[i]=result[i]+a1[i]+b1[i]-10;
            result[i+1]=1;
        }
    }
    //转化成字符型
    int flag;
    (result[judge]==0)?(flag=0):(flag=1);
    if(flag)
    for(int i=judge,j=0;i>=0;i--,j++)
    final[i]=result[j]+48;
    else
    for(int i=judge-1,j=0;i>=0;i--,j++)
    final[i]=result[j]+48;
    // printf("%s",final);
    for(int i=0;i<len2;i++)
    temp[i]=bridge[i];
    len=strlen(final);
}

 

标签:P1255,len2,int,++,char,--,final
来源: https://www.cnblogs.com/gyq1314520/p/14422551.html