본문 바로가기
JAVA

[JAVA][백준] 1676_팩토리얼 0의 개수

by saemsaem 2024. 4. 23.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

public class Zfactorial0_1676 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        /* factorial 구하기 */
        int n = Integer.parseInt(br.readLine());
        BigInteger factorial = new BigInteger("1"); //factorial 결과값을 BigInteger로 선언
        for (int i = n; i > 0; i--) {
            BigInteger temp = BigInteger.valueOf(i);
            factorial = factorial.multiply(temp);
        }

        /* 0 개수 구하기 */
        String num = factorial+"";
        int result = 0;
        for (int j = num.length()-1; j > 0; j--) {
            if (num.charAt(j) == '0') {
                result++;
            } else break;
        }
        System.out.println(result);
    }
}

팩토리얼을 구하는 과정은 어렵지 않았는데, BigInteger를 찾는게 시간이 걸렸다. 

0의 개수도 뒤에서 부터 stirng을 char로 받아 0인지 확인하면 되기 때문에 어렵지 않았다. 


BigInteger

BigInteger 는 아무리 큰 수라도 담을 수 있는 정수 타입이다. (최대 500! 의 값을 담아야 하는데, long은 그 수를 담지 못한다.)


선언

BigInteger bigNum = new BigInteger ("10002");

초기화 시 문자열 형식으로 입력해야 한다. 
실제로는 문자열로 동작하는 형식이다. 


사칙연산

BigInteger bigNum1 = new BigInteger("1000002");
BigInteger bigNum2 = new BigInteger("10002");

bigNum1.add(bigNum2);       //덧셈 (+)
bigNum1.subtract(bigNum2);  //뺄셈 (-)
bigNum1.multiply(bigNum2);  //곱셈 (*)
bigNum1.divide(bigNum2);    //나눗셈 (/)
bigNum1.remainder(bigNum2);//나머지 (%)

문자열이기 때문에, 정해진 메서드를 이용해서 계산해야 한다.