大数加法

题目描述
实现一个加法器,使其能够输出a+b的值。

输入
输入包括两个数a和b,其中a和b的位数不超过1000位。

输出
可能有多组测试数据,对于每组数据,
输出a+b的值。

样例输入
6 8
2000000000 30000000000000000000

样例输出
14
30000000002000000000

#include 
#include
int main()
{
     
    char a[1010],b[1010];
    int s1[1010],s2[1010],i,j,l1,l2,k,x,y;
    while(scanf("%s%s",a,b)!=EOF)
    {
     
        int s[1010]={
     0};
        l1=strlen(a),l2=strlen(b);//计算字符串长度
        //把个位放到第一位以此类推
        for(i=l1-1,j=0;i>=0;i--)
        s1[j++]=a[i]-'0';
        for(i=l2-1,j=0;i>=0;i--)
        s2[j++]=b[i]-'0';
        x=y=0;
        if(l1>=l2)
        {
     
            for(i=l2;i<l1;i++)
            s2[i]=0;//让多余部分为0
            for(i=0;i<l1;i++)//直接循环到最长的
            {
     
            x=s1[i]+s2[i]+y;//y为进位数
            y=x/10;//下一次进位
            s[i]=x%10;//取余赋值
            }
             
            k=l1;
        }
        if(l1<l2)
        {
     
            for(i=l1;i<l2;i++)
            s1[i]=0;
            for(i=0;i<l2;i++)
            {
     
            x=s1[i]+s2[i]+y;
            y=x/10;
            s[i]=x%10;
            }
            k=l2;
        }
        if(y==1)//如果最后y为1最高位就会+1,意思就是当1+999=1000时,只满足了000而没有去管1这个就要加个特判。
        s[i]=1;
        for(i=k-1+y;i>=0;i--)
        printf("%d",s[i]);
        printf("\n");
    }
}

你可能感兴趣的:(大数加法)