給定兩個以字串形式表示的非負整數 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
}
公眾號:沒有夢想的阿巧 后臺回復 "群聊",一起學習,一起進步
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/184366.html
標籤:其他
下一篇:企業禁止用遠控軟體
