大数加减.js

var add =function (a, b) {
    var carry = 0;
    var result = [];
    var len = Math.max(a.length, b.length);
    var i = len;
    while (i--) {
        var sum = (+a[i - len + a.length] || 0) + (+b[i - len + b.length] || 0) + carry;
        carry = parseInt(sum / 10);
        result.unshift(sum % 10);
    }
    if (carry) result.unshift(carry);
    return result.join('');
};

  
var subtract = function(a, b){ 
    var ltrimZero = function(str){
        var i = 0;
        while(i<str.length && str.charAt(i) === "0"){
            i++
        }
        return str.slice(i); 
    };
    var result = [];  
    //是否有借位  
    var minusOne = 0;  
    //去掉a,b开头的0  
    a = ltrimZero(a);  
    b = ltrimZero(b);  
    //补零对齐  
    while(a.length < b.length){  
        a = "0" + a;  
    }  
    while(b.length < a.length){  
        b = "0" + b;  
    }  
    //从后面位数往前相减  
    for(var i=a.length-1;i>=0;i--){  
        var c1 = a.charAt(i) - 0;  
        var c2 = b.charAt(i) - 0;  
        //如果当前位数无须借位  
        if(c1 - minusOne >= c2){  
            result.unshift(c1 - c2 - minusOne);  
            minusOne = 0;  
        }  
        else{  
            result.unshift(c1 + 10 - c2 - minusOne);  
            minusOne = 1;  
        }  
    }  
    //如果最高位仍然要借位  
    //比如:"99999" - "100000"  
    if(minusOne){  
        //=> -(100000 - 99999) => -1  
        var newResult = subtract(b, a);  
        newResult = ltrimZero(newResult);  
        return "-" + newResult;         
    }  
    result = result.join("");  
    result = ltrimZero(result);  
    return result ? result : "0";  
};

var result = subtract('5554433','11223347777');
console.log(result);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容