思路:
用string来保存大整数 -> 用0补全较短的那个数 -> 相应位数相加 -> 检查最后的进位是否为1
实现
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string temp(1000, '0');
string add(string s1, string s2)
{
string s;
int len_1 = s1.size(), len_2 = s2.size(), carry = 0;
// 用0补全较短的那个数
if(len_1 > len_2){
s2.insert(s2.begin(), temp.begin(), temp.begin() + len_1 - len_2);
s = s1;
}
else{
s1.insert(s1.begin(), temp.begin(), temp.begin() + len_2 - len_1);
s = s2;
}
// 相应位数相加
for(int i = len_1 - 1; i >= 0; i--){
s[i] = (s1[i] - '0' + s2[i] - '0' + carry) % 10 + '0';
carry = (s1[i] - '0' + s2[i] - '0' + carry) / 10;
}
// 检查最后的进位是否为1
if(carry == 1)
s = "1" + s;
return s;
}
int main()
{
string s1, s2;
cin >> s1 >> s2; // 用string来保存大整数
string s = add(s1, s2);
cout << s;
}