Loading... 这个其实就是模拟竖式计算,我们可以开一个 n+m 大小的数组用来保存结果,因为$num1 < 10^n且num2 < 10^m$,所以 $num1*num2 < 10^{n+m}$ 然后我们需要像竖式计算那样,把上式分别乘以下式的最后一位,倒数第二位...... 然后分别把对应的数字累加,并且要进位累加 所以有了下面的模拟代码,i+j+1 是当前位,i+j 是进位: ```go func multiply(num1 string, num2 string) string { n, m := len(num1), len(num2) res := make([]int, n+m) for i := n-1; i >= 0; i-- { for j := m-1; j >= 0; j-- { mul := int(num1[i]-'0') * int(num2[j]-'0') p1, p2 := i+j, i+j+1 sum := mul + res[p2] res[p2] = sum % 10 res[p1] += sum / 10 } } isZero := true ret := []byte{} for i := range res { if res[i] == 0 && isZero { continue } isZero = false ret = append(ret, byte(res[i]+'0')) } if len(ret) == 0 { return "0" } return string(ret) } ``` Last modification:July 20, 2025 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏