Go语言 如何将变量/参数传递给big.NewInt()

zfycwa2u  于 5个月前  发布在  Go
关注(0)|答案(1)|浏览(75)

下面的代码片段无法在N := big.NewInt(n)上编译,并出现以下错误:
不能使用n(int类型的变量)作为big的参数中的int 64值。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
}

字符串
如果我传递一个int 64文字(即N := big.NewInt(1)),它就可以工作。但是我需要一种方法来将int 64 * 变量 * 或 * 参数/参数 * 转换为big.Int。我做错了什么?Go语言根本不支持这个吗?

x7yiwoj4

x7yiwoj41#

错误是因为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
}


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

相关问题