티스토리 뷰
Problem (문제)
The factorial of the integer n, written n!, is defined as:
정수 n의 팩토리얼, n!은 다음과 같다.
n!=n*(n-1)*(n-2)*···*3*2*1
Calculate and print the factorial of a given integer.
주어진 정수의 팩토리얼을 계산하고 출력하세요.
For example, if n=30, we calculate 30*29*28*···*2*1 and get 265252859812191058636308480000000.
예를 들어, n=30일 때, 30*29*28*···*2*1을 계산하면 265252859812191058636308480000000입니다.
Function Description (함수 설명)
Complete the extraLongFactorials function in the editor below. It should print the result and return.
extraLongFactorials 함수를 아래의 에디터에서 완성하세요. 결과를 출력해야 합니다.
extraLongFactorials has the following parameter(s):
extraLongFactorials는 다음의 매개변수가 있습니다.
- n: an integer (정수)
Note: Factorials of n>20 can't be stored even in a 64-bit long long variable. Big integers must used for such calculations. Languages like Java, Python, Ruby etc. can handle big integers, but we need to write additional code in C/C++ to handle huge values.
노트: n>20인 팩토리얼은 64-bit 변수에 저장할 수 없다. 이러한 계산에는 큰 정수가 필요하다. Java와 Python, Ruby 같은 언어들은 큰 정수를 다룰 수 있지만, C/C++은 큰 정수를 다루기 위해 추가적인 코드가 필요합니다.
We recommend solving this challenge using BigIntegers.
이 문제를 해결하기 위해 큰 정수를 사용하는 것을 추천합니다.
Solution (풀이)
func extraLongFactorials(n int32) {
var i int32
answer := big.NewInt(1)
for i = 0; i < n; i++ {
answer.Mul(answer, big.NewInt(int64(n-i)))
}
fmt.Print(answer)
}
Go언어의 int형은 최대 9223372036854775807까지 저장할 수 있습니다. 하지만 이 문제에서는 더 큰 정수를 저장할 수 있어야 합니다. 그래서 Go언어의 math/big 패키지를 사용하여 큰 정수를 저장할 수 있도록 했습니다.
big.NewInt()를 사용하여 큰 정수를 저장할 수 있는 변수를 만들고 Mul() 함수를 이용하여 곱셈을 해주었습니다.
'Algorithms > Hacker Rank' 카테고리의 다른 글
[Hacker Rank] Apple and Orange (Javascript) (2) | 2020.12.07 |
---|---|
[Hacker Rank] Birthday Cake Candles (Javascript) (0) | 2020.12.02 |
[Hacker Rank] Staircase (Javascript) (0) | 2020.11.30 |
[Hacker Rank] Diagonal Difference (Javascript) (0) | 2020.09.18 |