JavaScript趣題:大整數字符串相加
阿新 • • 發佈:2019-02-16
對於兩個大整數字符串相加,很多語言提供了原生支援。
比如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(""); }