1. <?php
    2. /**
    3. * 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
    4. * Class Solution
    5. */
    6. class Solution {
    7. /**
    8. * 输入: num1 = "123", num2 = "456"
    9. * 输出: "56088"
    10. *
    11. * 1 2 3
    12. * 4 5 6
    13. * -----
    14. *
    15. *
    16. * @param String $num1
    17. * @param String $num2
    18. * @return String
    19. */
    20. function multiply($num1, $num2) {
    21. if ($num1 == '0' || $num2 == '0') {
    22. return '0';
    23. }
    24. $tmpMul = [];
    25. for ($i = strlen($num1) - 1; $i >= 0; $i--) {
    26. for ($j = strlen($num2) - 1; $j >= 0; $j--) {
    27. $tmpSum = $num1[$i] * $num2[$j];
    28. $tmpMul[$i + $j + 1] = isset($tmpMul[$i + $j + 1]) ? $tmpMul[$i + $j + 1] + $tmpSum : $tmpSum;
    29. }
    30. }
    31. $tmpMul[1] = 9;
    32. $ret = '';
    33. for ($i = count($tmpMul); $i > 0; $i--) {
    34. $div = floor($tmpMul[$i] / 10);
    35. $mod = $tmpMul[$i] % 10;
    36. if (isset($tmpMul[$i - 1])) {
    37. $tmpMul[$i - 1] = $tmpMul[$i - 1] + $div;
    38. } else {
    39. $mod = $tmpMul[$i];
    40. }
    41. $ret = $mod . $ret;
    42. }
    43. return $ret;
    44. }
    45. }
    46. $num1 = '123';
    47. $num2 = '456';
    48. $cls = new Solution();
    49. $ret = $cls->multiply($num1, $num2);
    50. echo "\n" . $ret;