Ruby's Louvre

每天学习一点点算法

导航

leetcode 43. Multiply Strings

注意各种反转

var multiply = function (a, b) {
      var cn = a.length + b.length;
      var product = new Array(cn).fill(0);
      /****
       * 两两相乘,并放进不同的格子里,如果里面有东西,则相加
       *   num1 = "123",  num2 = "456"
       *  0 * 0 , 0 * 1, 0 * 2
       *           1 * 0   1* 1   1 * 2
       *                   2 *0   2 * 1   2* 2
       *  位数A与位数B相乘,那么它们的值的个位应该放 A +B 的位置上
       */
      a = a.split('').reverse()
      b = b.split('').reverse()
      for (var i = 0; i < a.length; i++) {
        for (var j = 0; j < b.length; j++) {
          //必须加1,考虑要进位,
          var digit = i + j
          product[digit] += Number(a[i]) * Number(b[j])
          product[digit + 1] += Math.floor(product[digit] / 10);//处理进位
          product[digit] %= 10
        }
      }
      product.reverse()
      while (product[0] == 0) {
        product.shift();
      }
      //处理最前面的零
      return product.join('') || '0'
    }


    console.log(multiply('123', '456'))

posted on 2019-12-15 19:09  司徒正美  阅读(178)  评论(0编辑  收藏  举报