https://www.acmicpc.net/problem/1676
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 |