C++,
pasted
on Oct 18:
|
#include <string>
#include <sstream>
#include <vector>
string func(string& a, string&b){
int length_a = a.length();
int length_b = b.length();
int max_len = (length_a>length_b) ? length_a : length_b;
int min_len = (length_a<length_b) ? length_a : length_b;
bool flag = false;
if(max_len == length_a){
flag = true;
}
vector<int> digits_a;
vector<int> digits_b;
string res = "";
stringstream ss;
int temp = -1;
for(int i =0; i < length_a; i++){
ss << a[i];
ss >> temp;
digits_a.push_back(temp);
ss.clear();
}
temp = -1;
for(int i =0; i < length_b; i++){
ss << b[i];
ss >> temp;
digits_b.push_back(temp);
ss.clear();
}
int r = 0;
reverse(digits_a.begin(),digits_a.end());
reverse(digits_b.begin(),digits_b.end());
cout<<digits_a<<" "<<digits_b;
for(int i = 0; i<min_len; i++){
int d_a = digits_a[i];
int d_b = digits_b[i];
int d_res = d_a + d_b + r;
r = d_res / 10;
d_res = d_res - r * 10;
stringstream stream;
stream<<d_res;
string str=stream.str();
res = str + res;
cout<<res<<" "<<r<<" "<<d_res<<endl;
}
if(flag){
for(int i = min_len; i < max_len; i ++){
int d_res = 0;
if(r>0){
int d_a = digits_a[i];
int d_res = d_a + r;
r = d_res / 10;
d_res = d_res - r * 10;
}
else{
d_res = digits_a[i];
}
stringstream stream;
stream<<d_res;
string str=stream.str();
res = str + res;
}
}
else{
for(int i = min_len; i < max_len; i ++){
int d_res = 0;
if(r>0){
int d_b = digits_b[i];
int d_res = d_b + r;
r = d_res / 10;
d_res = d_res - r * 10;
}
else{
d_res = digits_b[i];
}
stringstream stream;
stream<<d_res;
string str=stream.str();
res = str + res;
}
}
return res;
}
int main(){
string a = "9999";
string b = "34591";
string res = func(a, b);
cout<<res<<" "<<9999+34591;
return 0;
}
|
Output:
|
[9, 9, 9, 9] [1, 9, 5, 4, 3]0 1 0
90 1 9
590 1 5
4590 1 4
04590 44590
|
|