溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang刷leetcode技巧之如何實現(xiàn)大數(shù)相乘

發(fā)布時間:2021-12-15 10:05:38 來源:億速云 閱讀:129 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細講解有關golang刷leetcode技巧之如何實現(xiàn)大數(shù)相乘,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

給定兩個以字符串形式表示的非負整數(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)或直接將輸入轉(zhuǎn)換為整數(shù)來處理。

解題思路:

     1,兩數(shù)相乘最大長度是兩個數(shù)的長度相加

     2,num1[i] 和 num2[j]相乘,結(jié)果只影響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,計算結(jié)果轉(zhuǎn)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<len(n1);i++{       for j:=0;j<len(n2);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<len(num);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ù)相乘”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI