简单高精度加法

【高精度】简单高精度加

题目描述

修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A、B的和,其中A和B的位数在5000位以内。

输入

共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在5000以内。

输出

输出一个非负数,即两数之和。

样例输入

1111111111
2222222222

样例输出

3333333333
#include <bits/stdc++.h>
#define N 5000
#define ZEROCHAR -48
int maxleng(int a,int b)
{
    return a>b?a:b;
}
int transnumber(char c)
{
    return c-'0';
}
int main()
{
    char a[N+5],b[N+5];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    scanf("%s %s",a,b);
    int len1=strlen(a);
    int len2=strlen(b);
    int i;
    for(i=0;i<(len1+1)/2;++i)
    {
        if(i==len1-1-i)
            break;
        a[i]=a[i]+a[len1-1-i];
        a[len1-1-i]=a[i]-a[len1-1-i];
        a[i]=a[i]-a[len1-1-i];
    }
    for(i=0;i<(len2+1)/2;++i)
    {
        if(i==len2-1-i)
            break;
        b[i]=b[i]+b[len2-1-i];
        b[len2-1-i]=b[i]-b[len2-1-i];
        b[i]=b[i]-b[len2-1-i];
    }
 
    int leng=maxleng(len1,len2);
    int c,psum,sum[N+5],an,bn;
    for(i=0,c=0,psum=0;i<=leng;++i)
    {
        an=transnumber(a[i]);
        bn=transnumber(b[i]);
        if(an==ZEROCHAR)
            an=0;
        if(bn==ZEROCHAR)
            bn=0;
        psum=an+bn+c;
        sum[i]=psum%10;
        c=psum/10;
    }
    int sumleng=(sum[leng]>0?leng+1:leng);
    for(i=sumleng-1;i>=0;--i)
    {
        printf("%d",sum[i]);
    }
    printf("\n");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Diliiiii/p/9164563.html
今日推荐