是在刷題的過程中接觸到了大數值的計算,之前用java也做過大數的計算是使用BigInteger,在go中的使用有一點不同
官方文檔
文檔地址:請戳
在golang的big包中實現了大數字的計算。如果我們想創建一個大數字可以使用:
// func NewInt(x int64) *Int 函數聲明
//此時a就是一個大數表示
a := big.NewInt(0)
在big包中也重新實現了多種運算,加入我們想要兩個大數相加可以使用這種方式:
a := big.NewInt(0)
b := big.NewInt(1)
// 此時a保存的就是a和b相加的結果
a.Add(a, b)
還有許多其他的方法可以使用,使用的結構都是類似的
最後如果我們想要得到大數的結果int64結果,可以使用這個函數
a.Int64()
以斐波那契數字爲例
func fib_big(n int) int{
if n == 0{
return 0
}else if n == 1{
return 1
}
a := big.NewInt(0)
b := big.NewInt(1)
//設置數字的限制,最大爲10e99,最小爲100位代表的整數
var limit big.Int
limit.Exp(big.NewInt(10), big.NewInt(99), nil)
//如果數字小於10e99則繼續進行計算
i := 0
for a.Cmp(&limit) < 0 && i < n{
// 計算下一個斐波那契數列
a.Add(a, b)
// 交換a和b,使a保留計算後的結果
a, b = b, a
i++
}
a.Mod(a, big.NewInt(1e9+7))
return int(a.Int64())
}