登录
首页 >  Golang >  Go问答

big.NewInt()如何接收变量/参数的传递

来源:stackoverflow

时间:2024-02-03 10:47:35 129浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《big.NewInt()如何接收变量/参数的传递》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

以下代码片段无法在 N := big.NewInt(n) 上编译,并出现以下错误:


cannot use n (variable of type int) as int64 value in argument to
big.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 变量或参数/参数转换为 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
}

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

到这里,我们也就讲完了《big.NewInt()如何接收变量/参数的传递》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>