算法流程
- 设定 i,j 两数别作为 num1,num2 两数字字符串的索引
- 添加当前位: 用carry记载前一位是否产生进位,默认个位数无前一位,所以默认carry = 0;计算 n1 + n2 + carry并且将(n1 + n2 + carry) % 10 添加至 res 头部;
- 索引溢出处理: 当索引 i或j 走过数字首部后,给 n1,n2 赋值为 0,相当于给 num1,num2 中长度较短的数字前面填 0,以便后续计算
- 当遍历完 num1,num2 后跳出循环,并根据 carry 值决定是否在头部添加进位 1,最终返回 res 即可
js代码实现
let num1 = "1510"
let num2 = "490"
function add(num1, num2) {
let i = num1.length - 1
let j = num2.length - 1
let res = ""
let carry = 0
while(i >= 0 || j >= 0) {
let n1 = Number(num1[i]) || 0
let n2 = Number(num2[j]) || 0
res = (n1 + n2 + carry) % 10 + res
carry = n1 + n2 + carry >= 10 ? 1 : 0
i--
j--
}
if(carry) {
res = carry + res
}
return res
}
console.log(add(num1, num2))