以下程式碼片段無法在N := big.NewInt(n)
上編譯,並出現下列錯誤:
<code> cannot use n (variable of type int) as int64 value in argument to big.NewInt </code>
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://www.php.cn/link/861f8aa2598860c0023f399e992eb747
以上是如何將變數/參數傳遞給 big.NewInt()的詳細內容。更多資訊請關注PHP中文網其他相關文章!