js 大整数相加

var BigInteger = function ( value ) {
	this.value = value;
}
BigInteger.prototype.add = function( b ) {
	var value = this.value;
	var groupNum;
	var appendZero = function ( p , num ) {
		var zeroString = "000000000000000";
		for (var i = 0; i < num; i++) {
			zeroString = zeroString + zeroString;
		};
		return zeroString.slice( 0 , 15 * num - p.length ) + p;
	};
	var paddingString = function ( ) {
		var length1 = value.length;	
		var length2 = b.length;
		var length = length1 > length2 ? length1 : length2;
		groupNum = parseInt(length / 15) + 1;
		var addA = appendZero(value , groupNum);
		var addB = appendZero(b,groupNum);
		return [ addA , addB ];
	};
	var paddingResult = paddingString();
	var doAdd = function ( ) {
		var cin = 0;
		var i = groupNum;
		var resultStr = "";
		while( i > 0 ) {
			var index1 = 15 * (i - 1);
			var index2 = 15 * i;
			var num1 = parseInt(paddingResult[ 0 ].slice(index1,index2));
			var num2 = parseInt(paddingResult[ 1 ].slice(index1,index2));
			var result = String(num1 + num2 + cin);
			if (result.length>15) {
				cin = 1;
				resultStr = result.slice(1) + resultStr;
			} else {
				cin = 0;
				resultStr = ( (resultStr.length == 15)? result : appendZero( result , 1 ) ) + resultStr;
			}
			i--;
		}
		if(cin===1)
			resultStr = "1" + resultStr;
		return resultStr;
	};
	var resultStr = doAdd();
	var delZero = function ( ) {
		var i;
		for (i = 0; i < resultStr.length; i++) {
			if (resultStr[ i ] !== "0" )
				break;
		};
		return resultStr.slice( i );
	};
	return delZero();
};
//test
var a = new BigInteger("555555555555555555555555555555555555555555555555555");
var result = a.add("555555555555555555555555555555555555555555555555555");
console.log( result );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值