Golang:如何将变量/参数传递给big.NewInt()

问题描述 投票:0回答:1

我是 Go 新手,以下代码片段无法在

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 variableparameter/argument 转换为
big.Int
。我究竟做错了什么? Go 根本不支持这个吗?

go math numeric factorial
1个回答
0
投票

除了

N := big.NewInt(int64(n))
的类型转换之外,阶乘计算的逻辑似乎不正确。实现同样目标的一种方法是做

func Factorial(n int) *big.Int {
    result := big.NewInt(1)
    var one big.Int
    one.SetInt64(1)
    bigN := big.NewInt(int64(n))
    for bigN.Cmp(&big.Int{}) == 1 {
        result.Mul(result, bigN)
        bigN.Sub(bigN, &one)
    }
    return result
}
© www.soinside.com 2019 - 2024. All rights reserved.