Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.
Note:
The length of both num1 and num2 is < 5100.
Both num1 and num2 contains only digits 0-9.
Both num1 and num2 does not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
#define Digit(x) (x-'0')
class Solution {
public:
string addStrings(string num1, string num2) {
string &shortN = num1.size()>num2.size() ? num2 : num1;
string &longN = num1.size()>num2.size() ? num1 : num2;
if(shortN.size()==0 && longN.size()==0) return "";
string ans;
bool carry=false;
int i=longN.size()-1, j=shortN.size()-1;
while(i>=0){
int sum = j>=0 ? Digit(longN[i])+Digit(shortN[j]) : Digit(longN[i]);
if(carry) sum++;
ans.push_back((char)((sum%10)+'0'));
if(sum/10) carry=true;
else carry=false;
i--; j--;
}
if(carry) ans.push_back((char)'1');
reverse(ans.begin(), ans.end());
return ans;
}
};