[43] 字符串相乘

/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
const multiply = function (num1, num2) {
  const len1 = num1.length;
  const len2 = num2.length;
  const arr1 = num1.split('').map(item => Number(item));
  const arr2 = num2.split('').map(item => Number(item));

  const ansArr = new Array(len1 + len2).fill(0); // 创建数组存储每位数,并填充0
  for (let i = len1 - 1; i >= 0; i--) {
    for (let j = len2 - 1; j >= 0; j--) {
      const val = arr1[i] * arr2[j];
      if (val >= 10) {
        addToAnsArr(val % 10, len1 + len2 - i - j - 2);
        addToAnsArr(Math.floor(val / 10), len1 + len2 - i - j - 1);
      } else {
        addToAnsArr(val, len1 + len2 - i - j - 2);
      }
    }
  }
  function addToAnsArr(val, index) {
    const sum = ansArr[index] + val;
    if (sum >= 10) {
      ansArr[index] = sum - 10;
      addToAnsArr(1, index + 1);
    } else {
      ansArr[index] = sum;
    }
  }
  // 去除多余位0
  const ll = ansArr.length;
  for (let i = ll - 1; i >= 0; i--) {
    if (ansArr[i] !== 0) {
      return ansArr.slice(0, i + 1).reverse().join('');
    }
  }
  return '0';
};

 

posted @ 2023-11-30 13:53  人恒过  阅读(15)  评论(0)    收藏  举报