题目1198:a+b(大数相加)

题目描述:

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

输入:

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

输出:

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

样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000


Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int ans_a[1010],ans_b[1010];
 
void init(int buf[],int len){
    for(int i=0;i<len;i++){
        buf[i]=0;
    }
}
 
void charToInt(char buf1[],int len1,char buf2[],int len2){
    for(int i=0;i<len1;i++){
        ans_a[i]=buf1[i]-'0';
    }
     for(int j=0;j<len2;j++){
        ans_b[j]=buf2[j]-'0';
    }
}
 
int main()
{
    char a[1010],b[1010];
    int ans[1010];
    while(scanf("%s%s",a,b)!=EOF){
        int len_a=strlen(a);
        int len_b=strlen(b);
        init(ans_a,len_a+10);
        init(ans_b,len_b+10);
        charToInt(a,len_a,b,len_b);
        int c=0,cnt=0;
        int i,j;
        bool flag=false;
        for(i=len_a-1,j=len_b-1;i>=0&&j>=0;i--,j--){
            ans[cnt]=(ans_a[i]+ans_b[j]+c)%10;
            c=(ans_a[i]+ans_b[j]+c)/10;
            ++cnt;
        }
        if(i<0){
            while(j>=0){
                ans[cnt]=(ans_b[j]+c)%10;
                c=(ans_b[j]+c)/10;
                ++cnt;
                --j;
            }
            if(c!=0){
                ans[cnt]=c;
                flag=true;
            }
        }
        if(j<0){
            while(i>=0){
                ans[cnt]=(ans_a[i]+c)%10;
                c=(ans_a[i]+c)/10;
                ++cnt;
                --i;
            }
            if(c!=0){
                ans[cnt]=c;
                flag=true;
            }
        }
        if(flag==true){
            for(int index=cnt;index>=0;index--){
                cout<<ans[index];
            }
            cout<<endl;
        }
        if(flag==false){
            for(int index=cnt-1;index>=0;index--){
                cout<<ans[index];
            }
            cout<<endl;
        }
    }
    return 0;
}
 
/**************************************************************
    Problem: 1198
    User: lcyvino
    Language: C++
    Result: Accepted
    Time:100 ms
    Memory:1528 kb
****************************************************************/
原文地址:https://www.cnblogs.com/Murcielago/p/4143942.html