Сложность: hard
Даны две строки
num1 и num2, представляющие неотрицательные целые числа. Необходимо вернуть их произведение в виде строки. Запрещено использовать встроенные библиотеки для работы с большими числами (
BigInteger) и напрямую преобразовывать строки в числа. Пример:
Input: num1 = "2", num2 = "3"
Output: "6"
👨💻 Алгоритм:
1⃣Перевернуть строки
num1 и num2. 2⃣Умножить каждую цифру
num2[j] на каждую цифру num1[i], добавляя результаты в массив ans. 3⃣ Обработать переносы (
carry), чтобы числа не превышали 9. 😎 Решение:
function multiply($num1, $num2) {
if ($num1 === "0" || $num2 === "0") {
return "0";
}
$n = strlen($num1);
$m = strlen($num2);
$ans = array_fill(0, $n + $m, 0);
for ($i = $n - 1; $i >= 0; $i--) {
for ($j = $m - 1; $j >= 0; $j--) {
$mul = ($num1[$i] - '0') * ($num2[$j] - '0');
$sum = $mul + $ans[$i + $j + 1];
$ans[$i + $j + 1] = $sum % 10;
$ans[$i + $j] += intdiv($sum, 10);
}
}
while (count($ans) > 1 && $ans[0] === 0) {
array_shift($ans);
}
return implode("", $ans);
}Ставь 👍 и забирай 📚 Базу знаний