JS大数字相加

问:如何计算大数字的相加?大到可以溢出的那种。

大数字相加,避免使用传统的相加(可能会溢出),所以使用数学题的思路来考虑这个问题。

目前只考虑两个大数字正整数的相加。

1.末尾加上末尾,如果大于等于10,产生进位。如果没有进位就是0.

2.倒数第二位加上倒数第二位,再加上进位,如果大于等于10,产生进位。

3.倒数第三位加上倒数第三位,再加上进位,如果大于等于10,产生进位。

。。。

直到加完数字小的位数。第一循环结束,进行第二循环。

第二循环是指,数字较小(或者长度较短)的数字已经加完结束了。剩下的就是第一循环加完后,剩下的进位与剩下的相加。

方法同上。

1.使用数组把加完的每一位结果存进去。

2.将两个数字转换为数组,并倒叙(由于个人习惯遍历从0开始)

具体代码如下:

let number1 = 999999989101112;

let number2 = 87919991;

let number1len = (number1.toString()).length;

let number2len = (number2.toString()).length;

let minlen = Math.min(number2len,number1len);

let maxlen = Math.max(number2len,number1len);

let maxValue = number1>number2?number1:number2;

let arr1 = [...(number1.toString())].reverse()

let arr2 = [...(number2.toString())].reverse()

let maxarr = arr1.length>arr2.length?arr1:arr2;

let jinwei = 0;

let result = []

for(let i = 0;i

      let tempArr1 = Number(arr1[i]),

      tempArr2 = Number(arr2[i]);

      result.push((tempArr1+tempArr2)%10+jinwei)

      jinwei = ~~((tempArr1+tempArr2)/10)

}

for(let i=minlen;i

      let tempValue = Number(maxarr[i]);

      result.push((tempValue+jinwei)%10);

      jinwei = ~~((tempValue+jinwei)/10);

}

if(jinwei != 0)

      result.push(jinwei)

result = (result.reverse()).join("")

console.info(result)

JS大数字相加_第1张图片
运行结果

如果还有其他更好的方法,或者上面的方法可以优化,还请指教

你可能感兴趣的:(JS大数字相加)