如何向Go的big.NewInt()传递变量或参数?编译报错求解
问题分析与解决
编译错误原因
big.NewInt()要求传入int64类型参数,但你的函数参数n是int类型。Go是强类型语言,不会自动进行不同整数类型的隐式转换,因此编译器抛出类型不匹配的报错。
直接解决方法
显式将int类型的n转换为int64即可:
N := big.NewInt(int64(n))
如果你的场景中n的取值可能超出int64范围,可以提前做范围校验;阶乘场景下一般输入不会触发溢出,这种转换是安全的。
更稳妥的方式是直接修改函数参数类型为int64,从根源避免类型转换:
func Factorial(n int64) *big.Int { // 后续代码无需转换n }
修正原代码的其他逻辑问题
除了类型转换,你的阶乘实现还有几个错误:
result初始化为new(big.Int)等价于0,相乘后结果永远为0,需初始化为1i初始化为0,第一次循环相乘会得到0,应从1开始迭代i.Add(i, new(big.Int))是加0,会导致无限循环,需改为加1
修正后的完整代码:
import "math/big" func Factorial(n int) *big.Int { result := big.NewInt(1) // 初始化为1,阶乘的乘法单位元 i := big.NewInt(1) // 从1开始遍历到n N := big.NewInt(int64(n)) for i.Cmp(N) <= 0 { // 包含n本身,完成1*2*...*n的计算 result = result.Mul(result, i) i = i.Add(i, big.NewInt(1)) // 每次迭代加1 } return result }
内容的提问来源于stack exchange,提问作者Cade Bryant
相关产品推荐
相关产品推荐

