计算机考研复试真题 a+b(大数加法)

题目描述

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

输入描述:

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

输出描述:

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

输入

2 6
10000000000000000000 10000000000000000000000000000000

输出

8
10000000000010000000000000000000





/*
程序设计思路:属于大数相加题型,一种典型解题步骤:
1、从结尾开始每位相加 
2、两个整数长度不相等(肯定有一个已经加完了,再把没有加完的加上去) 
3、最高位有进位,要再进一位 
4、结果字符串逆序
*/
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

string BigNumAdd(const string& strNum1, const string& strNum2)
{
    string strSum;
    int len1 = strNum1.size()-1;
    int len2 = strNum2.size()-1;
    int bit = 0;                //保存进位

    //从结尾开始每位相加 
    while (len1>=0 && len2>=0)
    {
        //求每位的和(要把进位也加上) 
        int tmpSum = strNum1[len1]-'0' + strNum2[len2]-'0' + bit;
        //保存进位结果 
        strSum += tmpSum % 10 + '0';
        //求进位 
        bit = tmpSum / 10;
        --len1;
        --len2; 
    }

    //两个整数长度不相等(肯定有一个已经加完了,不需要再额外加if来判断,因为while就可以判断)
    while (len1 >= 0)
    {
        //和上个while循环一样
        int tmpSum = strNum1[len1]-'0' + bit;
        strSum += tmpSum % 10 + '0';
        bit = tmpSum / 10;
        --len1; 
    }
    while (len2 >= 0) 
    {
        //和上个while循环一样
        int tmpSum = strNum2[len2]-'0' + bit;
        strSum += tmpSum % 10 + '0';
        bit = tmpSum / 10;
        --len2; 
    }

    //最高位有进位
    if (bit != 0)
        strSum += bit + '0'; 
    //反转
    reverse(strSum.begin(), strSum.end()); 
    return strSum;
}

int main(){
    string num1,num2;
    while(cin>>num1>>num2){
        cout<<BigNumAdd(num1,num2)<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/parzulpan/p/9948899.html