Bra*_*ley 5 factorial go bigint
我正在尝试创建一个阶乘程序,但是当数字变得太大时,答案就会出错.这是我的代码.我是math/big的新手,无法弄清楚如何正确地将它实现到程序中.任何帮助表示赞赏.谢谢.
package main
import (
"fmt"
"os"
"strconv"
"math/big"
)
func main() {
fmt.Print("What integer would you like to to find a total factorial for?")
var userinput string
var userint int
fmt.Scan(&userinput)
userint, err := strconv.Atoi(userinput)
if err != nil {
fmt.Println("ERROR: Please input an integer")
os.Exit(2)
}
var efactorial int = 1
var ofactorial int = 1
var tfactorial int
var counter int
for counter = 2; counter <= userint; counter = counter + 2 {
efactorial = efactorial * counter
}
for counter = 1; counter <= userint; counter = counter + 2 {
ofactorial = ofactorial * counter
}
fmt.Println("Even factorial is: ", efactorial)
fmt.Println("Odd factorial is: ", ofactorial)
tfactorial = efactorial + ofactorial
fmt.Println("The Total factorial is: ", tfactorial)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用它big.Int.MulRange来查找一系列整数的乘积.这是计算阶乘的理想选择.这是一个计算50的完整示例!
package main
import (
"fmt"
"math/big"
)
func main() {
var f big.Int
f.MulRange(1, 50)
fmt.Println(&f)
}
Run Code Online (Sandbox Code Playgroud)
输出:
30414093201713378043612608166064768844377641568960512000000000000
Run Code Online (Sandbox Code Playgroud)
您希望 ofactial 和 tfactorial 的类型为 big.Int
ofactorial := big.NewInt(1)
tfactorial := big.NewInt(0)
Run Code Online (Sandbox Code Playgroud)
然后您将需要使用大包中的方法来乘以此处找到的整数
你的 for 循环看起来像
for counter = 2; counter <= userint; counter = counter + 2 {
efactorial.Mul(efactorial * big.NewInt(counter))
}
Run Code Online (Sandbox Code Playgroud)