给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = "11", num2 = "123"
输出:"134"
示例 2:输入:num1 = "456", num2 = "77"
输出:"533"
示例 3:输入:num1 = "0", num2 = "0"
输出:"0"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这个题目首先考到的就是其实字符串也是数组(在c++中)所以我们其实可以同时指定两个指针,都一开始指向他们的最后一位,然后就像竖式运算一样加起来,怎么才能把它变成一个数字加起来呢,首先要考虑后面的一位有没有进位,把这两个在本位的数和进位的数加起来然后还要%10,避免超过10,然后还要把大于10 的部分提取出来作为进位的标志。
然后还出现一个问题就是:如果这两个数字的位数不同要怎么办?
如果它的索引数小于0,这证明它已经超过本身的字符串数组的长度。那么我们就把它定为0,这个循环的结束是当他们的索引都小于0,并且进位的标志也为0的时候,并且得到每一个书数还要把它转化成字符串。
最后要把这一个字符串逆置,因为我们得到的第一个数是得数的最后一位数。
class Solution {
public:
string addStrings(string num1, string num2) {
int i = num1.length()-1;
int j = num2.length()-1;
string ans = "";
int add = 0;
while(i>=0||j>=0||add!=0)
{
int a = i>=0 ? num1[i] -'0':0;
int b = j>=0 ? num2[j] -'0':0;
ans.push_back((a+b+add)%10 + '0');
add = (a + b + add) / 10;
i = i-1;
j = j-1;
}
reverse(ans.begin(),ans.end());
return ans;
}
};