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

相关文章
相关标签/搜索