這篇文章將為大家詳細講解有關golang刷leetcode技巧之如何實現(xiàn)大數(shù)相乘,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
我們提供的服務有:成都做網站、網站建設、外貿營銷網站建設、微信公眾號開發(fā)、網站優(yōu)化、網站認證、洛陽ssl等。為千余家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的洛陽網站制作公司
給定兩個以字符串形式表示的非負整數(shù) num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。
示例 1:
輸入: num1 = "2", num2 = "3"
輸出: "6"
示例 2:
輸入: num1 = "123", num2 = "456"
輸出: "56088"
說明:
num1 和 num2 的長度小于110。
num1 和 num2 只包含數(shù)字 0-9。
num1 和 num2 均不以零開頭,除非是數(shù)字 0 本身。
不能使用任何標準庫的大數(shù)類型(比如 BigInteger)或直接將輸入轉換為整數(shù)來處理。
解題思路:
1,兩數(shù)相乘最大長度是兩個數(shù)的長度相加
2,num1[i] 和 num2[j]相乘,結果只影響i+j 位和i+j+1位
r[i+j+1]+= (r[i+j]+n1[i]*n2[j])/10 r[i+j]= (r[i+j]+n1[i]*n2[j])%10
3,計算結果轉string需要關注頭部的0,如果全0,保留一個0
代碼實現(xiàn):
func multiply(num1 string, num2 string) string {
n1:=str2int(num1)
n2:=str2int(num2)
if n1==nil || n2==nil{
return ""
}
r:=make([]int64,len(n1)+len(n2))
for i:=0;i
for j:=0;j
r[i+j+1]+= (r[i+j]+n1[i]*n2[j])/10
r[i+j]= (r[i+j]+n1[i]*n2[j])%10
}
}
var s string
j:=len(r)-1
for j>0 && r[j]==0{
j--
}
for i:=0;i<=j;i++{
s=fmt.Sprintf("%d",r[i])+s
}
return s
}
func str2int(num string )[]int64{
if len(num)==0{
return nil
}
var r []int64
for i:=0;i
v,err:=strconv.ParseInt(string([]byte{num[i]}),10,10)
if err!=nil{
return nil
}
r=append([]int64{v},r...)
}
return r
}
關于“golang刷leetcode技巧之如何實現(xiàn)大數(shù)相乘”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。