SOURCE

// 思路
// 将大整数字符串 分割位数组 循环取最后一位
// 转换成数字相加 然后对10取余 保留个位数字 并拼接之前位数的字符串
// 每次循环判断是否需要往前进一位

function fn(a, b) {
    let result = '' // 存储大数字相加结果
    let 进位 = 0 // 是否往前进一位
    // 将大数字字符串 转换成数组
    a = a.split('')
    b = b.split('')
    // 只要a/b数组不为空 或 仍需要进位 就一直循环
    while (a.length || b.length || 进位) {
        // 每次循环从a b数组末尾取一位数字
        let a_str = a.pop() || 0 // 已经为空的数组 数字为0
        let b_str = b.pop() || 0
        // 当前位的数字相加后 再加上进位(0或1)
        let sum = Number(a_str) + Number(b_str) + 进位
        // 当前位总和对10取余 即为当前位实际值 再拼接result字符串
        result = (sum % 10) + result
        // sum大于9则需要往前进一位
        进位 = sum > 9 ? 1 : 0
    }
    return result
}

// 验证
let a = '123456789'
let b = '12'
console.log(fn(a, b)) // '123456801'
console 命令行工具 X clear

                    
>
console