Golang大数计算

7,531 阅读1分钟

是在刷题的过程中接触到了大数值的计算,之前用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())
}