题目描述
实现一个加法器,使其能够输出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; }