大数相加

117 阅读1分钟
// 大数相加
/**
 * 大数相加
 * 848941694919 + 262125612626
 *
 * 思路:
 * 1.num1,num2转为数组,倒序排列
 * 2.取大数数组长度作为循环长度
 * 3.一次取出数组的元素,进行相加,大于10说明有进位 逢十进1 flag = 1, 否则flag=0
 * 4.进位了 取预 sum = sum%/10,push
 * 5.判断最后一位是否有进位,有就push
 * 6.数组元素合并,取反
 */

function bigAdd(num1, num2) {
    let arr1 = num1.split('').reverse()
    let arr2 = num2.split('').reverse()
    let length = Math.max(arr1.length, arr2.length);

    //进位标识
    let flag = 0;
    let result = [];
    for (let i = 0; i < length; i++) {
        let cnum1 = Number(arr1[i]) || 0;
        let cnum2 = Number(arr2[i]) || 0;
        let sum = cnum1 + cnum2 + flag;
        if (sum > 10) {
            flag = 1;
            //取个位数
            sum = sum % 10
        } else {
            flag = 0;
        }
        result.push(sum);
        //最后一位进位标识
        if (result.length - 1 === i && flag) {
            result.push(sum)
        }
    }
    return result.reverse().join('')
}

let arr1 = '9089'
let arr2 = '90841'
console.log(bigAdd(arr1, arr2))