给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
代码块
所遇见的坑全在代码里进行了注释
class Solution {
public:
string addStrings(string num1, string num2) {
int len_1=num1.size()-1;
int len_2=num2.size()-1;
string ret="";
int step=0; //表示进位
while(len_1>=0||len_2>=0){//以长的字符串为结束条件
int sum=0; //每次将sum初始化为0
sum+=step;//加进位
if(len_1>=0){
sum+=num1[len_1]-'0';
len_1--;
}
if(len_2>=0){
sum+=num2[len_2]-'0';
len_2--;
}
if(sum>9){//有进位
step=1;//因为相加的范围在0~18所以进位就只能为1,表示当前位的进位
sum-=10;//当前的位的值
}
else{
step=0;//如果没有进位也要记得更新
}
ret.insert(0,1,sum+'0');//将当前位进行头插
}
if(step==1){//表示两个数加完了但是还有进位如1+99则将1头插
ret.insert(0,1,'1');
}
return ret;
}
};