主要思路
- 将两数转换为字符串
- 将两数右对齐,从最后一位依次往前两两相加
- 若两个位数之和不小于10则进位(将
overflow置为true,初始值为false) - 每一轮位数相加后记得判断进位状态,若有进位则当前位数之和减10。
- 得到位数之和后依次以字符串的形式向前补充。
- 两数都遍历完之后也要判断进位状态
const add = function (a, b) {
const maxLength = Math.max(a.length, b.length)
let sum = ''
let overflow = false
for (let i = 1; i <= maxLength; i++) {
const ai = a[a.length - i] || '0'
const bi = b[b.length - i] || '0'
let ci = parseInt(ai) + parseInt(bi) + (overflow ? 1 : 0)
overflow = ci >= 10
ci = overflow ? ci - 10 : ci
sum = ci + sum
}
sum = overflow ? '1' + sum : sum
return sum
}
console.log(add("11111111101234567","77777777707654321"))
console.log(add("911111111101234567","77777777707654321"))