题目1198:a+b【字符串】

题目描述:

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

输入:

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

输出:

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

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

感觉这道题很不严谨啊 测试用例应该只是 算两个正数的和 然后我搞了很久 正+负 负+负。。。。虽然有没做出来吧。。。。
#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int a[1005],b[1005],c[1005],d[1005];//c 进位  d 结果位 
string sa,sb;
int main(){
    while(cin>>sa){
        cin>>sb;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        for(int i=sa.size()-1,j=1002;i>=0;i--,j--){
            a[j]=(sa[i]-48);
        }
        for(int i=sb.size()-1,j=1002;i>=0;i--,j--){
            b[j]=(sb[i]-48);
        }
        int bitmax=sa.size()>sb.size()?sa.size()+1:sb.size()+1;
        for(int i=1002;i>1002-bitmax;i--){
            d[i]=(a[i]+b[i]+c[i])%10;
            c[i-1]=(a[i]+b[i]+c[i])/10;
        }
        int flagg=0;
        for(int j=1003-bitmax;j<1003;j++){
            if(flagg==0&&d[j]==0&&j!=1002){
                continue;
            }
            flagg=1;
            cout<<d[j];
        }
        cout<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Elaine-DWL/p/6813359.html