Number最大範圍相關

今天在leetcode上面作題目,有一道數組形式的整數加法運算,原本覺得還蠻簡單的,想着直接將數組先轉化爲String類型,而後直接相加就好,數組

  代碼以下: code

  var addToArrayForm = function(A, K) {
    let result = A.toString().replace(/,/g,'')
    let c = String(+result+K)
    let arr = [...c]
    return arr
  };orm

結果驗證沒有經過:addToArrayForm ([1,2,6,3,0,7,1,7,1,9,7,5,6,6,4,4,0,0,6,3] ,516);leetcode

開始怎麼也沒有找到問題在哪裏,還以爲本身的邏輯沒毛病,後來仔細檢查才發現原來Number類型有一個最大範圍和最小範圍,能夠使用性Number.MAX_VALUE , Number.MIN_VALUE屬性進行查看,字符串

是正負2的53次方,超出最大範圍後精確性就會下降,此時若是須要運算的話能夠考慮使用字符串的方式進行,通過後期思考後,it

  修改過的代碼以下:io

  var addToArrayForm = function(A, K) {
    var ik = String(K).split('');
    var maxLength = Math.max(A.length,ik.length);
    var mow = new Array(maxLength)
    for(let i =1;i<maxLength+1;i++) {
      let r1 = +A[A.length-i]||0,r2=+ik[ik.length-i]||0
      let result = r1+r2+(mow[mow.length-i]||0);
      mow[mow.length-i] = result
      if (mow[mow.length-i] >= 10){
        mow[mow.length-i] = result-10
        if(mow.length-i == 0 ){
          mow.unshift(1)
        }else {
          mow[mow.length-i-1] = (mow[mow.length-i-1] || 0)+1
        }
      }
     }
    return mow
  };function

相關文章
相關標籤/搜索