Number最大范围相关

今天在leetcode上面做题目,有一道数组形式的整数加法运算,本来以为还蛮简单的,想着直接将数组先转化为String类型,然后直接相加就好,

  代码如下: 

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

结果验证没有通过:addToArrayForm ([1,2,6,3,0,7,1,7,1,9,7,5,6,6,4,4,0,0,6,3] ,516);

开始怎么也没有找到问题在哪里,还觉得自己的逻辑没毛病,后来仔细检查才发现原来Number类型有一个最大范围和最小范围,可以使用性Number.MAX_VALUE , Number.MIN_VALUE属性进行查看,

是正负2的53次方,超出最大范围后精确性就会降低,此时如果需要运算的话可以考虑使用字符串的方式进行,经过后期思考后,

  修改过的代码如下:

  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
  };

posted @ 2019-06-27 15:21  随机显示2090  阅读(239)  评论(0编辑  收藏  举报