해커랭크(Problem Solving)

Extra Long Factorials

감전우 2019. 10. 2. 08:59

문제: Extra Long Factorials

난이도: Medium

 

문제 설명

 정수 n의 팩토리얼은 n! 로 표시되고, 다음과 같이 정의된다:

n!=n×n-1×n-2×⋯×3×2×1

주어진 정수의 팩토리얼을 계산하고 출력하여라.

참고: 20보다 큰 정수의 팩토리얼은 64bit long long 변수에도 저장될 수 없다. 이 문제를 해결하려면 BigInteger를 사용하는 것을 권장한다.

 

문제 해결

소스 코드

    static void extraLongFactorials(int n) {

        BigInteger big = BigInteger.ONE;

        while(n > 1) {

            big = big.multiply(BigInteger.valueOf(n));

            n--;

        }

        System.out.println(big);

    }

해설

 이 문제는 프로그래머가 BigInteger에 대해 알고 있고, 사용할 수 있는가를 시험하기 위해 출제된 것으로 추정된다.

 BigInteger는 매우 큰 정수를 다뤄야할 때 사용되며, BigInteger 타입의 변수로 사칙연산을 할 경우 일반적인 기호를 사용할 수 없고 각각의 연산에 해당되는 메소드들인 add(), subtract(), multiply(), divide()를 이용해야 한다. 또한, BigInteger타입의 변수에 어떠한 정수를 초기화할 때에도 정수 값을 그대로 사용할 수 없고 BigInteger.valueOf(정수)의 형태나 지원하는 상수 세 가지인 BigInteger.ZERO, BigInteger.ONE, BigInteger.TEN을 사용해야 한다.