美文网首页
js实现两个字符串类型的数字求和

js实现两个字符串类型的数字求和

作者: xinyiyake | 来源:发表于2019-10-30 17:36 被阅读0次

    题目:

    /*
    完成一个add方法,完成两个字符串类型的数字相加,并返回这个结果。
    注意:这两个数字的值可能会很大,大的会超出javascript所能计算的最大数值。
    例:
    */
    add("123", "321"); // "444"
    add("11", "99"); // "110"
    add('987429134712934876249385134781395873198472398562384958739845234859234758913759182357398457398474598237459823745928347538',
                  '835743829547328954732895474893754893753281957319857432958432548937859483265893274891378593187431583942678439217431924789');// '1823172964260263830982280609675150766951754355882242391698277783797094242179652457248777050585906182180138262963360272327'
    

    我的思路

    1. 把两个字符串分割成数组,并且数组的每位元素代表一位
    2. 比较两个数值谁的位数最多,说明这个数值比较大
    3. 循环,做类似于加法的操作,逢十进一
    function add(a, b) {
      var number1,number2,MAX_LENGTH,result=[];
     //比较两个数值谁的位数多,循环时用
      if(a.length>b.length){
        number1 = a.split('').reverse()
        number2 = b.split('').reverse()
        MAX_LENGTH = a.length
      }else{
        number1 = b.split('').reverse()
        number2 = a.split('').reverse()
        MAX_LENGTH = b.length
      }
      // 做加法,因为前面做了数组翻转,所以这个相当于从个位开始计算
      for(var i = 0;i<MAX_LENGTH;i++){
        var sum
        if(number2[i]){
          // 两个值在当前位都有值
          sum = Number(number1[i])+Number(number2[i])
        }else{
          // 较小的值在当前位没有值
          sum = Number(number1[i])
        }
        if(result[i]){
          // 上个位数计算中逢十进一的判断
          sum +=1
        }
        result[i] = String(sum%10)
        if(sum>=10){
          // 逢十进一
          result[i+1] = '1'
        }
      }
      
     // 最后结果处理
      return result.reverse().join('')
    }
    
    

    厉害的解法

    function add (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
       // 判端下一位计算时是否需要+1
        c = c > 9
      }
      return res
    }
    

    相关文章

      网友评论

          本文标题:js实现两个字符串类型的数字求和

          本文链接:https://www.haomeiwen.com/subject/vuqavctx.html