是在刷题的过程中接触到了大数值的计算,之前用java也做过大数的计算是使用BigInteger,在go中的使用有一点不同
官方文档
文档地址:请戳

// 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)
还有许多其他的方法可以使用,使用的结构都是类似的

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())
}