题目:
当有超出数值范围的数字需要相乘,对他们进行运算并返回字符串
// JS笔试 大数乘法
function multiply(num1, num2) {
// TODO
}
console.log(multiply('109999999999999999', '2'))
// '219999999999999998'
console.log(multiply('12345678901234567890', '2'))
// '24691357802469135780'
console.log(multiply('12345678901234567890', '1234567890'))
// '15241578751714678875019052100'
这一题的解题思路主要是通过乘法笔算中的竖式运算来完成 需要一个数组存储运算后的结果 这个数组需要预先将所有元素填充成0方便我们后面进行直接运算,数组元素是竖式计算单位的结果,因为两个个位整数相乘最大是81不会超过js的整数范围,另外我们发现运算结果的长度不会超过两个乘数的长度之和
答案:
function multiply (num1, num2) {
// 如果其中一位是0的话,那么结果一定是0,直接返回
if (num1 === '0' || num2 === '0') {
return '0'
}
const store = new Array(num1.length + num2.length).fill(0)
for (let i = num2.length - 1; i >= 0; i--) {
for (let j = num1.length - 1; j >= 0; j--) {
// i作为乘数2的位数索引,同时作为尾数是否需要补零的标准
store[i + j + 1] += Number(num2[i]) * Number(num1[j])
// 判断是否超过两位数,如果超过进行进位处理
if (store[i + j + 1] > 9) {
store[i + j] += Math.floor(store[i + j + 1] / 10)
store[i + j + 1] = store[i + j + 1] % 10
}
}
}
return store.join('').replace(/^0*/, '')
}
欢迎指点