题目链接:415. 字符串相加 - 力扣(LeetCode)
题目内容:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
示例 1:
输入:num1 = "11", num2 = "123"
输出:"134"
示例 2:
输入:num1 = "456", num2 = "77"
输出:"533"
示例 3:
输入:num1 = "0", num2 = "0"
输出:"0"
思路
- 循环体:
- 倒序取 num1 和 num2 的数字字符的数值(augend+addend),进行数值相加,并注意进位(carry),结果存储到 ret 中,
- 即:
ret = augend + addend + carry
- 进位被使用后置零:
carry = 0;
- 但若:
ret > 9 则carry = 1
: - 将处理好的 相加的结果存储到
string result
- 处理 进位(carry)
- reverse string result
注意:若其中一个string的数字字符被取完,则默认取“0”
解:
class Solution {
public:
string addStrings(const string& num1, const string& num2)
{
int carry = 0;//进位
string result;//存储计算结果
int sub1 = num1.size() - 1, sub2 = num2.size() - 1;
while (sub1 >= 0 || sub2 >= 0)
{
int augend = (sub1 >= 0) ? num1[sub1] - '0' : 0;
int addend = (sub2 >= 0) ? num2[sub2] - '0' : 0;
int ret = augend + addend + carry;
carry = 0;
if (ret > 9)
{
ret -= 10;
carry = 1;
}
result += (ret + '0');
--sub1;
--sub2;
}
if (carry)
result += '1';
reverse(result.begin(), result.end());
return result;
}
};
END