给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger
), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = "11", num2 = "123" 输出:"134"
示例 2:
输入:num1 = "456", num2 = "77" 输出:"533"
解题思路与算法:
方法1:模拟
这题需要我们输出两个数相加以后的结果,我们可以通过模拟 “竖式加法” 对该题求解,“竖式加法”是我们小时候经常对两个数进行计算的方式,两个数的每位数从右到左依次相加,两数之和大于10就进位到上一个数,反复操作,最后得出结果
实现很简单,我们创建两个指针end1和end2分别指向num1和num2的最后一个元素,然后创建一个变量carry,查看当前是否进位,若有两个不数位不同的两数相加,end1或end2位负数时就往数位低的那个数高位补0,这样做就可以处理当两个数数位不同的情况
代码演示:
class Solution
{
public:
string addStrings(string num1, string num2)
{
int end1, end2, carry;
end1 = num1.size() - 1, end2 = num2.size() - 1;
carry = 0;
string s1;
while(end1 <= 0 || end2 <= 0)
{
int sum = 0;
int i = end1 <= 0 ? num1[end1] - '0' : 0;
int j = end2 <= 0 ? num2[end2] - '0' : 0;
sum = end1 + end2 + carry;
carry = sum / 10;
s1 += sum % 10 + '0';
--end1;
--end2;
}
if(carry != 0)
{
S1 += carry;
}
return s1;
}
};