2017-03-02 9 views
1

계계 프로그램을 만들려고하는데 숫자가 너무 커지면 대답이 잘못됩니다. 여기 내 코드가있다. 나는 수학/큰 문제에 익숙하지 않으며이를 프로그램에 올바르게 구현하는 방법을 알 수 없습니다. 어떤 도움을 주셔서 감사합니다. 감사.Math/Big in Go Lang을 사용하는 방법

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

당신은 유형 big.Int로 ofactorial 및 tfactorial 원하는

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

당신의 int는 루프

당신의 here을 발견 곱하는 큰 패키지에서 방법을 사용하는 것이 좋습니다 모양이 비슷합니다.

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

big.Int.MulRange을 사용하면 정수 범위의 제품을 찾을 수 있습니다. 이는 계승 계산에 이상적입니다.

30414093201713378043612608166064768844377641568960512000000000000 
: 여기 complete example that computes 50!

package main 

import (
    "fmt" 
    "math/big" 
) 

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

출력입니다