본문 바로가기
코딩테스트/백준(BOJ)

[백준] 1564번: 팩토리얼5(JAVA)

by hadgehogdev 2023. 9. 18.

▶ 문제

 

1564번: 팩토리얼5

첫째 줄에 정수 N이 주어진다. N은 1,000,000보다 작거나 같다. 또, 9보다 크거나 같다.

www.acmicpc.net

팩토리얼5란, N!의 0이 아닌 뒤 5자리를 말한다.

N이 주어졌을 때, 팩토리얼5를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N이 주어진다. N은 1,000,000보다 작거나 같다. 또, 9보다 크거나 같다.

출력

첫째 줄에 N의 팩토리얼5를 계산한다.


▶ 풀이

 - JAVA

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

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        long num = 1;
        long modV = (long)1e12;
        for(int i = 1; i <= N; i++){
            num *= i;
            while(num%10 == 0)
                num/=10;

            num %= modV;
        }

        String tmp = Long.toString(num);
        System.out.println(tmp.substring(tmp.length()-5, tmp.length()));
    }
}

▶ 메모

모듈러 연산시 적당히 큰 값으로 하여야한다.

- 1eN: 1.0*10^N를 뜻한다. (ex: 1e1 = 10.0, 1e4 = 10000.0)

- str.substring(int idx1, int idx2): 문자열(str) 길이 기준 idx1부터 idx2까지 자른다.