如何推广企业平台,青岛seo用户体验,湛江网站排名提升,网络销售渠道43. 字符串相乘
其实就是大数乘法题#xff0c;这道题用草稿纸演练一下#xff0c;其实很好找到方法#xff0c;模拟大数乘法即可。需要注意的是进位和迭代值#xff0c;还有注意向下取整和去除前导0#xff08;容易遗漏#xff09;。去除前导0的时候还要注意如果全是0这道题用草稿纸演练一下其实很好找到方法模拟大数乘法即可。需要注意的是进位和迭代值还有注意向下取整和去除前导0容易遗漏。去除前导0的时候还要注意如果全是0除完了的情况下要手动赋值答案为‘0’。 讲一下这道题的思路
1.初始化创建一个长度为 len1 len2 的数组 posx位数*y位数最多等于xy位数用于存储每一位的乘积结果为了方便加减设置每一个位置的初始值为 0。
2.乘法逻辑我们可以倒序也可以直接按照数字来倒序遍历将当前位字符转换为数字 n1 和 n2。【通过n1num[i]这样子赋值将其转化为数字】
3.累加结果计算当前位置的总和 sum即当前位乘积加上之前存储的值 pos[i j 1]。更新结果数组
pos[i j 1] sum % 10存储当前位的值pos[i j] Math.floor(sum / 10)将进位加到前一位
4.处理前导零在完成所有乘法后可能会在 pos 数组的最前面出现前导零。通过 while 循环去除这些零。【一直判断pos【0】是否为0如果是则shift出去。】 pos.shift() 方法用于移除数组的第一个元素。如果 pos 数组不为空使用 pos.join() 将数组转为字符串并返回。 5.最后返回结果注意要判断答案的长度如果 pos 数组为空返回 ‘0’否则转为字符串返回。
代码
//大数乘法
var multiply function (num1, num2) {const len1 num1.length;const len2 num2.length;const pos new Array(len1 len2).fill(0);for (let i len1 - 1; i 0; i--) {const n1 num1[i];//将 num1[i] 的值转换为一个数字for (let j len2 - 1; j 0; j--) {const n2 num2[j];const multi n1 * n2;const sum multi pos[i j 1];//注意要加上pos[ij1]pos[i j 1] sum % 10;//本位pos[i j] Math.floor(sum / 10);//增位记得向下取整数注意是要加上之前的值迭代}}//除掉前导零while (pos[0] 0) {pos.shift();}return pos.length ? pos.join() : 0;
};