• home > webfront > ECMAS > javascript >

    js算法题:两个大数相加最直观简洁的算法实现

    Author:zhoulujun Date:

    两个大数相加,位数 long long ,概况就是N长,而且加上小数位,尼玛,坑爹啊。其实,这个在实际工作中并没有什么卵用,出了装B外比如bi

    两个大数相加,位数 long long ,概况就是N长,而且加上小数位,尼玛,坑爹啊。

    其实,这个在实际工作中并没有什么卵用,出了装B外

    比如bigDecimal.js,其他金融类库不计其数。

    但是,算法,还是得看下,

    百度下,相关搜索n页。

    js算法题-大数相加.png

    但是,我觉得我这个实现,是最直观简洁的。

    function bigAdd(num1,num2) {
        if(!num1){
            return num2;
        }
        if(!num2){
            return num1;
        }
        var arr1=num1.split("."),
            arr2=num2.split("."),
            intArr1=arr1[0].split(""),
            intArr2=arr2[0].split(""),
            decimalsArr1=arr1[1]||[],
            decimalsArr2=arr2[1]||[],
            resualtIntArr=[],
            resualtDecimalsArr=[],
            carrayInt=0,
            carrayDecimals=0;
        var decimalsMinLength=decimalsArr1.length>decimalsArr2.length?decimalsArr1.length:decimalsArr2.length;
        while (decimalsMinLength>0){
            decimalsMinLength--;
            var sumDecimals=carrayDecimals+parseInt(decimalsArr1[decimalsMinLength]||0)+parseInt(decimalsArr2[decimalsMinLength]||0);
           if(sumDecimals<10){
                resualtDecimalsArr.unshift(sumDecimals);
                carrayDecimals=0;
           }else {
               resualtDecimalsArr.unshift(sumDecimals-10);
               carrayDecimals=1;
           }
        }
        if(carrayDecimals>0){
            carrayInt=carrayDecimals;
        }
        while (intArr1.length||intArr2.length){
            var sumInt=carrayInt+parseInt(intArr1.pop()||0)+parseInt(intArr2.pop()||0);
            if(sumInt<10){
                resualtIntArr.unshift(sumInt);
                carrayInt=0;
            }else {
                resualtIntArr.unshift(sumInt-10);
                carrayInt=1;
            }
        }
        if(carrayInt>0){
            resualtIntArr.unshift(carrayInt);
        }
        return resualtIntArr.join("")+"."+resualtDecimalsArr.join("");
    
    
    }
    // 34231674.654576891234
    console.log(897353.222+33334321.432576891234);
    console.log(bigAdd("897353.222","33334321.432576891234"));



    转载本站文章《js算法题:两个大数相加最直观简洁的算法实现》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/js/2012_0215_8049.html