JavaScript中多位數相加處理方法
阿新 • • 發佈:2019-02-02
多位數相加 ##1 我的解決方案
1.本來想自己寫的,不過在網上找了一篇,跟自己寫的差不多,就拿來用了;
2.第二種方法,比較的巧妙,進位用了true。在執行的過程中true會當做1來使用。
3.基本的解法就是,單獨對每個數進行相加,然後用字串儲存,最後在拼接;
4.自己再寫個多個多位數相加
function sumMultString(arg,arg1,arg2,……){
if(arguments.length>=2){
for(var i=0;i<arguments.length;i++){
arguments [i+1] = arguments[i+1]==undefined?arguments[i]:sumStrings(arguments[i],arguments[i+1]);
}
return arguments[i];
}
}
function sumStrings(a,b) {
var result = [], count = 0;
if(a.length < b.length) b=[a, a=b][0];
b=Array(a.length-b.length+1).join('0')+b;
var arrA = a.split ('');
var arrB = b.split('');
for(var j=0; j<a.length; j++) {
var temp = (Number(arrA.pop()) + Number(arrB.pop())) +count;
temp>=10?[temp,count]=[temp-10,1]:count=0;
result.push(temp);
}
result.push(count);
return result.reverse().join('').replace(/^0+/,'');
}
實現分兩步:
1 為輸入中較小的一個數前端補0,使得兩個數一樣長。在那之前為了確定給哪個數補0首先進行了一次比較。
2 將兩個數的最後一位依次pop出,進行相加,並存儲到result陣列中。如果相加的結果大於10,取個位數部分,並使得進位符號count+1。簡單來說就像小學時學加法那樣,按部就班就對了。
最後得到result陣列,還不是我們要的結果,我們需要對它反轉,然後轉換成字串,還有去除最前面的0.
2 其他人的解決方案
function sumStrings(a,b){
var res='', c=0;
a = a.split('');
b = b.split('');
while (a.length || b.length || c){
c += ~~a.pop() + ~~b.pop();
res = c % 10 + res;
c = c>9;
}
return res.replace(/^0+/,'');
}
一看之下簡潔了不止一點點……
改進的地方在於:
沒有上面提到的第一步,不用補0,不用判斷哪個數大,如此一來清楚了不少。
沒有使用count變數代表進位,直接將相加結果和進位變數記錄在了一個變數c裡,
使用 ~~a 而不是Number(a)來進行格式轉換。(~表示取反操作)