https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제 접근1
직관적으로 N!를 구해서 뒤에서부터 0의 개수를 세면 된다.
N의 범위가 500까지이므로 팩토리얼을 구하면 long형을 넘는다. 따라서, BigInteger를 써야함.
코드1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
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());
BigInteger fac = new BigInteger("1");
for (int i = N; i >= 1; i--) {
fac = fac.multiply(BigInteger.valueOf(i));
}
long cnt = 0;
String s = fac.toString();
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == '0') {
cnt++;
} else {
break;
}
}
System.out.println(cnt);
}
}
문제 접근2
[ 참조 ] https://yeoncoding.tistory.com/551
코드2
import java.io.BufferedReader;
import java.io.IOException;
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());
int cnt = 0;
for (int i = 1; i <= N; i++) {
int num = i;
while (num % 5 == 0) {
cnt++;
num /= 5;
}
}
System.out.println(cnt);
}
}
'백준' 카테고리의 다른 글
이런저런 문제들 #1373: 2진수 8진수 [JAVA] (0) | 2023.08.11 |
---|---|
그래프 문제(bfs,dfs) #1260: DFS와 BFS [JAVA] (0) | 2023.08.09 |
DP #2011: 암호코드[JAVA] (0) | 2023.07.22 |
이런저런 문제들 #1850: 최대공배수 [JAVA] (0) | 2023.07.19 |
DP #2225: 합분해 [JAVA] (0) | 2023.07.16 |