[CodeWars][JS]實現大整數加法

問題描述

實現‘字符串加法’,即將兩個以字符串形式表示的數字相加,獲得結果真後返回一個新的字符串。javascript

例如:輸入‘123’,‘321’,返回‘444’。前端

這樣在進行兩個任意大的整數相加的時候,既不會溢出,也不會損失精度。java

解決方案

1 個人解決方案

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首先進行了一次比較。blog

2 將兩個數的最後一位依次pop出,進行相加,並存儲到result數組中。若是相加的結果大於10,取個位數部分,並使得進位符號count+1。簡單來講就像小學時學加法那樣,循序漸進就對了。ip

最後獲得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+/,'');
}

 

一看之下簡潔了不止一點點……
改進的地方在於:it

1. 沒有上面提到的第一步,不用補0,不用判斷哪一個數大,如此一來清楚了很多。io

2. 沒有使用count變量表明進位,直接將相加結果和進位變量記錄在了一個變量c裏,function

3. 使用 ~~a 而不是Number(a)來進行格式轉換。

相關文章
相關標籤/搜索