[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 @   人恒过  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示