给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
提示:
-
num1
和num2
的长度都小于 5100 -
num1
和num2
都只包含数字0-9
-
num1
和num2
都不包含任何前导零 - 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
思考
不能直接转换成数字相加,就只能一位一位字符取出来。像竖式那样相加
代码实现
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function(num1, num2) {
// 指向最后一个字符
let i = num1.length-1
let j = num2.length-1
let add = 0
// 存放相加结果,第一个是个位
const ans = []
while(i>=0 || j>=0 || add!=0) {
// 如果序号大于等于0,就利用减号做隐式转换,将字符转换为数字。否则就说明走完了,进行补0
let x = i >= 0 ? num1.charAt(i) - '0' : 0;
let y = j >= 0 ? num2.charAt(j) - '0' : 0;
let result = x + y + add
ans.push(result % 10)
// js的除法不是地板处,会有小数的
add = Math.floor( result / 10)
i -= 1
j -= 1
}
return ans.reverse().join("")
};
知识点
1.获取第i个索引的字符
str.charAt(i)
2.js的减法可以强制隐式转换,变成数字
3.js的除法不是地板除,获取10位数需要人工处理一下