如何将变量/参数传递给 big。NewInt() 中

How do I pass a variable/parameter to big.NewInt()

提问人:Cade Bryant 提问时间:11/15/2023 最后编辑:Jonathan HallCade Bryant 更新时间:11/15/2023 访问量:85

问:

以下代码片段无法编译,并出现以下错误: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 文字(即 ),它就可以工作了。但是我需要一种方法将 int64 变量或参数/参数转换为 .我做错了什么?Go 根本不支持这个吗?N := big.NewInt(1)big.Int

GO 数学 数值 阶乘

评论

3赞 Inian 11/15/2023
转换为所需的类型,即nN := big.NewInt(int64(n))
1赞 Inian 11/15/2023
您可以使用 pkg.go.dev/math/big#Int.MulRange 从中查找数字的乘积[1..n]

答:

3赞 Inian 11/15/2023 #1

错误是因为 https://pkg.go.dev/math/big#NewInt 函数将值作为参数,而不是类型。执行所需的类型转换int64int

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
}

https://go.dev/play/p/A-H-y10OwBb