(Medium) LeetCode - Multiply Strings

tags: Go
category: LeetCode
description: LeetCode - Multiply Strings
created_at: 2021/08/09 20:00:00

cover image

題目連結: https://leetcode.com/problems/multiply-strings/


簡介

這題就是很早以前學程式的時候很經典的題目 「大數乘法」,主要核心的話大概就是知道直式的乘法怎麼算,就那個邏輯,不知道的話現在趕快拿起紙跟筆算一次

在數字很大的時候直接用數字運算可能會溢位(overflow),所以才會用字串存,雖然現在滿多語言都有支援大數的,但在早期還不知道的時候就只能自己開陣列算,就得用到直式乘法的邏輯,算完再把陣列組起來。

下面一樣附上 Go 的程式碼。只是這次難得直接 0ms

func multiply(num1 string, num2 string) string {
    // 如果其中一個數字是0,相乘必為0
    if num1 == "0" || num2 == "0" {
        return "0"
    }

    // 開一個陣列存答案,長度是兩個數字的相加,因為就算是9*9,也是兩位數=81
    num3 := make([]int, len(num1) + len(num2))
    result := ""

    // 開始直式乘法
    for i := 0; i < len(num1); i++ {
        for j := 0; j < len(num2); j++ {
            num3[i+j+1] += int((num1[i]-48) * (num2[j]-48))
        }
    }

    // 乘完一次進位
    for i := len(num3) - 1; i > 0; i-- {
        num3[i-1] += num3[i] / 10
        num3[i] %= 10
    }

    // 把答案組起來
    for i := 0; i < len(num3); i++ {
        result += strconv.Itoa(num3[i])
    }

    // 去掉前綴0
    return strings.TrimLeft(result, "0")
}



最後更新時間: 2021年08月09日.