一、题目描述
给定两个字符串形式的非负整数 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 <= 104num1和num2都只包含数字0-9num1和num2都不包含任何前导零
二、思路分析
- 先将两个字符串通过
padStart方法进行补齐 - 遍历字符串,从后面开始遍历,相加两个字符得到
sum,定义一个变量temp用来计数,当超过sum超过10就存储起来,为后面相加的数进行加1操作 - 当循环结束后还需要判断
temp是否为1,如果是,那么需要在最前面添加一位
三、代码答案
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function (num1, num2) {
const len = Math.max(num1.length, num2.length);
const n1 = num1.padStart(len, 0)
const n2 = num2.padStart(len, 0)
let re = []
let temp = 0
for (var i = len - 1; i >= 0; i--) {
let sum = +n1[i] + +n2[i]
if (temp === 1) {
sum += temp
temp = 0
}
if (sum >= 10) {
temp = 1
re[i] = sum - 10
} else {
re[i] = sum
}
}
if (temp === 1) {
re.unshift(1)
temp = 0
}
return re.join("")
};