大整数加法

记录2种大整数加法的方法

/**
		 * [sumBigIntStrings 相加2个大整数]
		 * @param  {[type]} a [description]
		 * @param  {[type]} b [description]
		 * @return {[type]}   [description]
		 */
		function sumBigIntStrings1 (a,b) {
			var res = "",
			    c   = 0;

			a = (a +"").split(""),
			b = (b +"").split("");

			while (a.length || b.length || c) {
				c = ~~c + ~~a.pop() + ~~b.pop();
				res = c%10 + res;

				c = c > 9;
			}

			return res;
		}

		/**
		 * [bigIntSum 相加2个大整数]
		 * @param  {[type]} operator1 [description]
		 * @param  {[type]} operator2 [description]
		 * @return {[type]}           [description]
		 */
		function sumBigIntStrings2 (operator1,operator2) {

 			if(/[^0-9]/gi.test(operator1 +""+operator2))  {
 				return;
 			}

			var shortOne = operator1 + "",
			    longOne  = operator2 + "";

			// 确定长度长的和短的
			var tmp = "";
			if (shortOne.length > longOne.length) {
				tmp = shortOne;
				shortOne = longOne;
				longOne = tmp;
			}

			// 在数组上从最后一个位相加值,进位则继续向前加
			Array.prototype.sumKey = function (position,value) {
				 
				var res,
				    left;

			 	res = ~~this[position] + ~~value;

			 	this[position] = res%10;

			 	if(res > 9) {
			 		return arguments.callee.call(this,position - 1,Math.floor(res/10));
			 	}else{
			 		return this;
			 	}

			};

			var shortArr = shortOne.split(""),
			    longArr  = longOne.split("");
		            longArr.unshift("0");

			var longLength  =  longArr.length,
			    shortLength = shortArr.length;
			for (var leng1 = shortLength - 1;leng1 >= 0;leng1-- ) {

				longArr.sumKey(longLength - (shortLength - leng1),shortArr[leng1]);

			}

			return longArr.join("").replace(/^0*/,"");
		}

		var operator1 =       542341134,
		operator2 = 649423934523456;

		var res1 = sumBigIntStrings1(operator1,operator2);
		var res2 = sumBigIntStrings2(operator1,operator2);
		console.log("operator1: " + operator1 +"  operator2:" + operator2);
		console.log("方法1结果:"+ res1);
		console.log("方法2结果:"+ res2);

  

原文地址:https://www.cnblogs.com/alanzhang906536936/p/5444530.html