高精度加法(字符串)

简单高精度加法

题目描述:修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A、B的和,其中A和B的位数在5000位以内。
输入:共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在5000以内。
输出:输出一个非负数,即两数之和。
样例输入:
1111111111
2222222222
样例输出:
3333333333
可以算是最基础的高精度算法了,不过既然是高精度,就说明至少double也装不下,需要用字符串处理。

    ##include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 5000
    char a[N],b[N];
    int aa[N],bb[N],ans[N]={0};
    int max(int x,int y)
    {
        if(x>y) return x;
        else return y;
    }
    int main()
    {
        int i,j,stra,strb,maxlen;
        scanf("%s%s",a,b);
        stra=strlen(a);//计算长度
        strb=strlen(b);
        for(i=stra-1,j=0;i>=0;i--,j++)
        {
            aa[j]=a[i]-'0';//每一位转化为数字
        }
        for(i=strb-1,j=0;i>=0;i--,j++)
        {
            bb[j]=b[i]-'0';
        }
        maxlen=max(stra,strb);
        for(i=0;i<maxlen+1;i++)
        {
            if(aa[i]+bb[i]+ans[i]<10) ans[i]=ans[i]+aa[i]+bb[i];
            else//处理进位问题
            {
                ans[i]=(aa[i]+bb[i]+ans[i])%10;
                ans[i+1]=1;
            }
        }
        if(ans[maxlen]!=0)//最后结果有可能多一位
        {
            for(i=maxlen;i>=0;i--) printf("%d",ans[i]);
        }
        else
        {
            for(i=maxlen-1;i>=0;i--) printf("%d",ans[i]);
        }
        printf("\n");
        return 0;
    }

猜你喜欢

转载自blog.csdn.net/soul_mingling/article/details/86939684