lintcode 655 大整数加法
以字符串的形式给出两个非负整数 num1 和 num2,返回 num1 和 num2 的和。
样例
样例 1:
输入 : num1 = “123”, num2 = “45”
输出 : “168”
注意事项
num1 和 num2 的长度都小于5100。
num1 和 num2 都只包含数字 0-9。
num1 和 num2 都不包含任何前导零。
您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。
class Solution {
public:
/**
* @param num1: a non-negative integers
* @param num2: a non-negative integers
* @return: return sum of num1 and num2
*/
string addStrings(string &num1, string &num2) {
// write your code here
string str;
//if(num1.size()==0&&num2.size()==0)
// return str;
stack<char> s;
int i=num1.size()-1;
int j=num2.size()-1;
int flag = 0;//若需要进位,则flag为1
//3个while,入栈
while(i>=0 && j>=0){
if((num1[i]+num2[j]+flag)>='j'){
s.push(num1[i]+num2[j]+flag-58);
flag=1;
}
else{
s.push(num1[i]+num2[j]+flag-48);
flag=0;
}
i--;j--;
}
while(i>=0){
if((num1[i]+flag)>=':'){
s.push(num1[i]+flag-10);
flag=1;
}
else{
s.push(num1[i]+flag);
flag=0;
}
i--;
}
while(j>=0){
if((num2[j]+flag)>=':'){
s.push(num2[j]+flag-10);
flag=1;
}
else{
s.push(num2[j]+flag);
flag=0;
}
j--;
}
if(flag==1){
s.push('1');
}
//出栈
while(!s.empty()){
str += s.top();
s.pop();
}
//返回结果
return str;
}
};
用到了栈,复杂度较高