给定两个字符串形式的非负整数
num1
和num2
,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如
BigInteger
), 也不能直接将输入的字符串转换为整数形式。示例 1:
输入:num1 = "11", num2 = "123" 输出:"134"示例 2:
输入:num1 = "456", num2 = "77" 输出:"533"示例 3:
输入:num1 = "0", num2 = "0" 输出:"0"提示:
1 <= num1.length, num2.length <= 104
num1
和num2
都只包含数字0-9
num1
和num2
都不包含任何前导零
解题思路:创建一个新的字符串用来存放相加的结果,从num1和num2的尾部开始相加,判断是否大于10,大于10进位,并把减去10之后的结果放入新的字符串(头插)中,判断下一位即可。
class Solution {
public:
string addStrings(string num1, string num2) {
int size1 = num1.size() - 1;
int size2 = num2.size() - 1;
string add;
int flag = 0;
int ret = 0;
while (size1 >= 0 || size2 >= 0)
{
ret = 0;
if (size1 >= 0) { ret += num1[size1]- '0'; size1--; }
if (size2 >= 0) { ret += num2[size2] - '0'; size2--; }
if (flag == 1) { ret += flag; flag--; }
if (ret >= 10)
{
flag = 1;
ret = ret - 10;
}
add.insert(0,1, ret+'0');
}
if (flag == 1) add.insert(0, 1, '1');
return add;
}
};
注意:当最后进位数如果是1的话,记得把1再次进行头插