https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
import java.util.*;
import java.io.*;
public class Main {
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	static StringBuilder sb=new StringBuilder();
	
	public static void main(String args[]) throws Exception {
		try (Scanner scanner = new Scanner(System.in)) {
			int n=scanner.nextInt();
			int numberof2=0, numberof5=0;
			for(int i=2;i<=n;i++) {
				int temp=i;
				while(true) {
					if(temp%2==0) {
						numberof2++;
						temp/=2;
					}
					else if(temp%5==0) {
						numberof5++;
						temp/=5;
					}
					else break;
				}
			}
			int result=Math.min(numberof2, numberof5);
			System.out.println(result);
		}
	}
}팩토리얼에서 0의 개수는 10의 거듭제곱에 따라서 결정됩니다.
10은 2와 5를 소인수로 가지므로, n의 팩토리얼을 살펴본다고 하면, 1부터 n까지의 숫자가 2와 5를 소인수로 몇 개를 갖는지 확인하고, 그 중 작은 수를 결과값으로 지정해주면 답이 됩니다.
예를 들어 10!을 살펴보면 2, 4, 6, 8, 10에서 2^8이 나오고, 5, 10에서 5^2이 나오므로 10^2을 인수로 갖게 됩니다.
따라서 끝자리에 0이 두 개 나오는 것을 확인할 수 있습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
| [BOJ 2740번] 행렬 곱셈(JAVA) (0) | 2020.08.30 | 
|---|---|
| [BOJ 2004번] 조합 0의 개수(JAVA) (0) | 2020.08.14 | 
| [BOJ 2609번] 최대공약수와 최소공배수(JAVA) (feat. 유클리드 호제법) (0) | 2020.08.14 | 
| [BOJ 1037번] 약수(JAVA) (0) | 2020.08.14 | 
| [BOJ 11051번] 이항 계수 2(JAVA) (0) | 2020.08.10 | 
