题号415:
给定两个字符串形式的非负整数和,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解题思路:
从右往左逐位相加,用一个01变量处理进位;
没有遍历完的字符串需要再加上,同样注意进位处理;
最后还需要一次进位处理(如"999"+"1")。
代码实现:
class Solution {
public:
string addStrings(string num1, string num2) {
string s="";
int i=num1.length()-1,j=num2.length()-1,flag=0; // flag用于进位标记
while(i>=0 && j>=0){
int tmp=(num1[i]-'0')+(num2[j]-'0')+flag;
if(tmp>9){ // 若两数之和大于等于10,需要进位处理
flag=1;
tmp-=10;
}else{
flag=0;
}
s=to_string(tmp)+s;
i--;
j--;
}
if(i>=0){ // 字符串num1还没遍历结束
while(i>=0){
int tmp=(num1[i]-'0')+flag; // 同样需要处理进位
if(tmp>9){
flag=1;
tmp-=10;
}else{
flag=0;
}
s=to_string(tmp)+s;
i--;
}
}else if(j>=0){// 字符串num2还没遍历结束
while(j>=0){
int tmp=(num2[j]-'0')+flag; // 同样需要处理进位
if(tmp>9){
flag=1;
tmp-=10;
}else{
flag=0;
}
s=to_string(tmp)+s;
j--;
}
}
if(flag)
s="1"+s; // 处理最后的进位
return s;
}
};
领取专属 10元无门槛券
私享最新 技术干货