美文网首页
JS大数字相加

JS大数字相加

作者: 一座被占用 | 来源:发表于2017-07-28 16:35 被阅读0次

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

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

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

    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)

    运行结果

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

    相关文章

      网友评论

          本文标题:JS大数字相加

          本文链接:https://www.haomeiwen.com/subject/jykflxtx.html