问:如何计算大数字的相加?大到可以溢出的那种。
大数字相加,避免使用传统的相加(可能会溢出),所以使用数学题的思路来考虑这个问题。
目前只考虑两个大数字正整数的相加。
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<minlen;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<maxlen;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)
如果还有其他更好的方法,或者上面的方法可以优化,还请指教