大数相加问题一直是一个很经典的算法问题。给定两个非常非常大,大到超越了不可能用int,long long int等类型表示的数字,所以就要用其他的方法。
我的解决方案是使用两个string来保存数字,然后再模拟两个数字相加的情况。最后再输出。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string a,b,c="";
cin >> a >> b;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int i = 0,carry = 0,num1,num2,adds;
while(i < a.size() && i < b.size()){
num1 = (a[i] - '0');
num2 = (b[i++] - '0');
c.push_back('0' + (num1 + num2 + carry)%10);
carry = (num1 + num2 + carry)/10;
}
while(i < a.size()){
num1 = (a[i++] - '0');
c.push_back('0' + (num1 + carry)%10);
carry = (carry + num1)/10;
}
while(i < b.size()){
num2 = (b[i++] - '0');
c.push_back('0' + (num2 + carry)%10);
carry = (carry + num2)/10;
}
while(carry){
c.push_back('0' + (carry)%10);
carry /= 10;
}
reverse(c.begin(),c.end());
cout << c;
return 0;
}
sample input:
99999 1
sample output:
100000