给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式
示例:
输入: num1 = "2", num2 = "3"
输出:“6”
思路
按照平时计算乘法的方式:竖式乘法。
把 num1
和 num2
的每一位都分别相乘,结果保存在数组中,然后把乘积相加。
但是在实际的计算中,可以进行优化,在计算每一位的乘积的时候,把上一位的进位也考虑进去,这样代码更优雅一些。
关键部分
num1[i] * num2[j] 的结果,本位保存在 sumArr[i+j+1],进位保存在 sumArr[i+j], 当计算下一位的时候,把本位的积加上上一位的进位,就能算出当前的本位与进位。重复这一过程,直到两个字符串中每一位都已经相乘过了,数组中保存的就是计算结果。
func multiply(num1 string, num2 string) string {
if num1 == "0" || num2 == "0" {
return "0"
}
sumArr := make([]int, len(num1) + len(num2))
for i := len(num2)-1; i >= 0; i -- {
n2 := int(num2[i] - '0')
for j := len(num1)-1; j >= 0; j -- {
n1 := int(num1[j] - '0')
sum := n2 * n1 + sumArr[i+j+1]
sumArr[i+j+1] = sum % 10
sumArr[i+j] += sum / 10
}
}
res := ""
for k, v := range sumArr {
if k == 0 && v == 0 {
continue
}
res += string(v + '0')
}
return res
}
公众号:没有梦想的阿巧 后台回复 "群聊",一起学习,一起进步
有疑问加站长微信联系(非本文作者)