给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
难度:🌟🌟🌟🌟
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
提示:

func multiply(num1 string, num2 string) string {
if num1 == "0" || num2 == "0" {
return "0"
}
m, n := len(num1), len(num2)
ans := "0"
for i := n - 1; i >= 0; i-- {
add := 0
curr := ""
for j := n - 1; j > i; j-- {
curr += "0"
}
y := int(num2[i] - '0')
for j := m - 1; j >= 0; j-- {
x := int(num1[j] - '0')
product := x*y + add
add = product / 10
curr = strconv.Itoa(product%10) + curr
}
for ; add != 0; add /= 10 {
curr = strconv.Itoa(add%10) + curr
}
ans = addStrings(ans, curr)
}
return ans
}
func addStrings(num1, num2 string) string {
i, j := len(num1)-1, len(num2)-1
add := 0 // 进位
ans := ""
for ; i >= 0 || j >= 0 || add != 0; i, j = i-1, j-1 {
x, y := 0, 0
if i >= 0 {
x = int(num1[i] - '0')
}
if j >= 0 {
y = int(num2[j] - '0')
}
result := x + y + add
ans = strconv.Itoa(result%10) + ans
add = result / 10
}
return ans
}