(算法)大数相加

261 阅读1分钟

主要思路

  • 将两数转换为字符串
  • 将两数右对齐,从最后一位依次往前两两相加
  • 若两个位数之和不小于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"))