1. 程式人生 > >JavaScript趣題:大整數字符串相加

JavaScript趣題:大整數字符串相加

對於兩個大整數字符串相加,很多語言提供了原生支援。

比如Java,提供了BigInteger類,而JS這方面是沒有支援的,實現就要靠咋們自己了。

下面這個字串相加函式,接收兩個字串引數,並返回它們相加之後的結果,也是字串形式。

主要思路還是逐位相加並進位,實現時要考慮的細節還是蠻多的。

function sumStrings(a,b) {
	//通過補零讓a和b對齊
	//若a比b短,則對a補零
	while(a.length < b.length){
		a = "0" + a;
	}
	//若b比a短,則對b補零
	while(b.length < a.length){
		b = "0" + b;
	}
	//是否有進位
	var addOne = 0;
	//結果陣列
	var result = [];
	//從個位開始相加
	for(var i=a.length-1;i>=0;i--){
		var c1 = a.charAt(i) - 0;
		var c2 = b.charAt(i) - 0;
		var sum = c1 + c2 + addOne;
		//若數字相加大於9,則進位
		if(sum > 9){
			result.unshift(sum - 10);
			addOne = 1;
		}
		else{
			result.unshift(sum);
			addOne = 0;
		}
	}
	//應付下面的情況:
	//"99" + "11" => "110"
	//它最後仍然要進位
	if(addOne){
		result.unshift(addOne);
	}
	//應付如下的情況
	//"01" + "01" => "2"
	//而不是"02",所以移除第一位的"0"
	if(!result[0]){
		result.splice(0,1);
	}
	return result.join("");
}