Skip to main content

Multiply Strings

Problem statement

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 and num2 consist of digits only.
  • Both num1 and num2 do not contain any leading zero, except the number 0 itself.

My solution

/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
if (num1 == "0" || num2 === "1") {
return num1;
}
if (num2 === "0" || num1 === "0") {
return num2;
}

let carry = 0;
let sum = 0;

let results = Array.from({
length: num1.length + num2.length
}, () => 0)

let i;
let j

for (i = num1.length - 1; i >= 0; i--) {
carry = 0;
for (j = num2.length - 1; j >= 0; j--) {
sum = num2[j] * num1[i] + carry + results[i + j + 1];
// console.log(`${i}:${j} => ${sum}`)
carry = Math.floor(sum / 10);
results[i + j + 1] = sum % 10;
}
// console.log(`${i}:${j}`)
results[i + j + 1] = carry;
}

console.log(results)

if (results[0] === 0) {
results.shift();
}
return results.join("")
};