给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
提示:
num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
思路: 定义两个指针i,j分别指向num1和num2的末尾,模拟人工加法。同时维护一个进位位carry,初始为0。
模拟加法: 每次计算temp = num1[i] + nums[j] + carry 其中,将temp%10加到结果字符串的头部,并保存temp/10的结果到carry。 如果遇到其中一个字符串先遍历结束,那么就将较短的字符串的对应数字补0,即每次计算的时候都加0。 直至循环结束。
循环结束之后如果carry位中不为0(只可能为1),则在结果字符串头部加上“1”。
AC代码:(C++)
class Solution {
public:
string addStrings(string num1, string num2) {
int len1 = num1.size() - 1, len2 = num2.size() - 1, carry = 0;
string ans = "";
while (len1 >= 0 || len2 >= 0) {
int n1 = len1 >= 0 ? num1[len1] - '0' : 0;
int n2 = len2 >= 0 ? num2[len2] - '0' : 0;
int temp = n1 + n2 + carry;
carry = temp / 10;
ans = to_string(temp % 10) + ans;
len1--;
len2--;
}
if (carry == 1) {
ans = "1" + ans;
}
return ans;
}
};
|