2017-03-02 37 views
1

我试图创建一个因子程序,但是当数字变得太大时,答案就会出错。这是我的代码。我是数学/大学新手,无法弄清楚如何正确地将其实施到程序中。任何帮助表示赞赏。谢谢。如何在Go Lang中使用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) 
} 

回答

1

你想ofactorial和tfactorial为类型big.Int

ofactorial := big.NewInt(1) 
tfactorial := big.NewInt(0) 

那么你将要使用的方法从大包乘INTS发现here

您的for循环会看起来像

for counter = 2; counter <= userint; counter = counter + 2 { 
    efactorial.Mul(efactorial * big.NewInt(counter)) 
} 
4

您可以使用big.Int.MulRange找到一系列整数的乘积。这对计算阶乘是理想的。这里有一个complete example that computes 50!

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    var f big.Int 
    f.MulRange(1, 50) 
    fmt.Println(&f) 
} 

输出:

30414093201713378043612608166064768844377641568960512000000000000