以下代码片段无法在
N := big.NewInt(n)
上编译,并出现以下错误:
不能在参数中使用 n(int 类型的变量)作为 int64 值 大.NewInt
func Factorial(n int) *big.Int {
var result = new(big.Int)
i := new(big.Int)
N := big.NewInt(n)
for i.Cmp(N) < 0 {
result = result.Mul(i, result)
i = i.Add(i, new(big.Int))
}
return result
}
如果我传递一个 int64 文字(即
N := big.NewInt(1)
),它就会起作用。但我需要一种方法将 int64 variable 或 parameter/argument 转换为 big.Int
。我究竟做错了什么? Go 根本不支持这个吗?
错误是因为 https://pkg.go.dev/math/big#NewInt 函数采用
int64
值作为参数,而不是 int
类型。执行所需的类型转换为
N := big.NewInt(int64(n))
此外,计算逻辑可以非常简单地写为
func Factorial(n int) *big.Int {
result, one := big.NewInt(1), big.NewInt(1)
bigN := big.NewInt(int64(n))
for bigN.Cmp(&big.Int{}) == 1 {
result.Mul(result, bigN)
bigN.Sub(bigN, one)
}
return result
}