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);
大数加减.js
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 转自解决方法思路:将小数化成整数后再作运算。 具体代码如下: 加法运算 减法运算 乘法运算 除法运算
- 这一周工作主要是写js,遇到使用JS加减时间的问题,觉得需要总结记录一下。为了下次遇到这种问题时查阅方便,也为了更...