1198.a+b(大整数加法)

题目描述:

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

输入:

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

输出:

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

样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000
#include<stdio.h>
#include<string.h>
#include<algorithm>

struct biginteger{
    int digit[1000];
    int size;
    void init(){  //初始化 
        for(int i=0;i<1000;i++) digit[i]=0;
        size=0;
    }
    void set(char str[]){
        init();
        int L=strlen(str);
        for(int i=L-1,j=0,t=0,c=1;i>=0;i--){
            t+=(str[i]-'0')*c;
            j++;
            c+=10;
            if(j==4 || i==0){
                digit[size++]=t;
                j=0;
                t=0;
                c=1;
            }
        }
    }
    void output(){
        for(int i=size-1;i>=0;i--){
            if(i!=size-1) printf("%04d",digit[i]);
            else printf("%d",digit[i]);
        }
        printf("\n");
    }
    biginteger operator + (const biginteger &A) const{
    biginteger ret;
    ret.init();
    int carry=0;
    for(int i=0;i<A.size || i<size;i++){
        int tmp=A.digit[i]+digit[i]+carry;
        carry=tmp/10000;
        tmp%=10000;
        ret.digit[ret.size++]=tmp;
    }
    if(carry!=0){
        ret.digit[ret.size++]=carry;
    }
    return ret;
    }
}a,b,c;

char str1[1002],str2[1002];

int main(){
    while(scanf("%s%s",str1,str2)!=EOF){
        a.set(str1);
        b.set(str2);
        c=a+b;
        c.output();
    }
    return 0;    
}

 

posted @ 2018-10-01 18:17  bernieloveslife  阅读(369)  评论(0编辑  收藏  举报