码迷,mamicode.com
首页 > 其他好文 > 详细

简单高精度加法

时间:2018-06-10 22:13:17      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:sizeof   str   har   define   第一个   内存   描述   scanf   char   

【高精度】简单高精度加

题目描述

修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数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;
}

 

简单高精度加法

标签:sizeof   str   har   define   第一个   内存   描述   scanf   char   

原文地址:https://www.cnblogs.com/Diliiiii/p/9164563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!