Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and num2
, also represented as a string.
Note: You must not use any built-in BigInteger library or convert the inputs to integer directly.
Example 1:
Input: num1 = "2", num2 = "3" Output: "6"
Example 2:
Input: num1 = "123", num2 = "456" Output: "56088"
Constraints:
1 <= num1.length, num2.length <= 200
num1
andnum2
consist of digits only.- Both
num1
andnum2
do not contain any leading zero, except the number0
itself.
Solution:
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
let len1 = num1.length;
let len2 = num2.length;
let carry = 0;
let val = 0;
let index = 0;
let res = Array(len1 + len2).fill(0);
for (let i = len1 - 1; i >= 0; i--) {
carry = 0;
for (let j = len2 - 1; j >= 0; j--) {
// calucate from the right position and store in result array from index 0
// reverse it later
index = len1 + len2 - 2 - i - j;
// basic math calculation
val = (num1[i] * num2[j]) + res[index] + carry;
carry = Math.floor(val / 10);
res[index] = val % 10;
}
// check if has carry 1
if (carry) res[index + 1] = carry;
}
// before reverse, remove the begining 0
while (res.length > 1 && res[res.length - 1] === 0) res.pop();
return res.reverse().join("");
};