Golang大數計算

是在刷題的過程中接觸到了大數值的計算,之前用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())
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章