## 题目

> - 题号：43
> - 难度：中等
> - https://leetcode-cn.com/problems/multiply-strings/


给定两个以字符串形式表示的非负整数 num1 和 num2，返回 num1 和 num2 的乘积，它们的乘积也表示为字符串形式。

<b>示例 1</b>:
```c
输入: num1 = "2", num2 = "3"
输出: "6"
```

<b>示例 2</b>:
```c
输入: num1 = "123", num2 = "456"
输出: "56088"
```



<b>示例 3</b>:
```c
输入: num1 = "498828660196", num2 = "840477629533"
输出: "419254329864656431168468"
```


<b>说明</b>：

- num1 和 num2 的长度小于110。
- num1 和 num2 只包含数字 0-9。
- num1 和 num2 均不以零开头，除非是数字 0 本身。
- 不能使用任何标准库的大数类型（比如 BigInteger）或直接将输入转换为整数来处理。


---
## 实现

- 状态：通过
- 311 / 311 个通过测试用例
- 执行用时：132 ms, 在所有 C# 提交中击败了 94.74% 的用户
- 内存消耗：24.1 MB, 在所有 C# 提交中击败了 31.82% 的用户

```c
public class Solution {
    public string Multiply(string num1, string num2) {
        if (num1 == "0" || num2 == "0")
            return "0";
        int len1 = num1.Length;
        int len2 = num2.Length;
        int len = len1 + len2;
        int[] temp = new int[len];

        for (int i = len2 - 1; i >= 0; i--)
        {
            int k = len2 - i;
            int b = num2[i] - '0';
            for (int j = len1 - 1; j >= 0; j--)
            {
                int a = num1[j] - '0';
                int c = a*b;

                temp[len - k] += c%10;
                if (temp[len - k] >= 10)
                {
                    temp[len - k] = temp[len - k]%10;
                    temp[len - k - 1]++;
                }

                temp[len - k - 1] += c/10;
                if (temp[len - k - 1] >= 10)
                {
                    temp[len - k - 1] = temp[len - k - 1]%10;
                    temp[len - k - 2]++;
                }
                k++;
            }
        }

        StringBuilder sb = new StringBuilder();
        int s = temp[0] == 0 ? 1 : 0;
        while (s < len)
        {
            sb.Append(temp[s]);
            s++;
        }
        return sb.ToString();        
    }
}
```


