
문제

내 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Main extends Exception {
public static void main(String[] args) throws IOException {
// N!을 계산했을 때, 뒤에 0이 몇 개 있느냐?
// ex. 10! = 3,628,800 == 뒤에서부터 0이 2개 있음 == 답 2개
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
// num의 Factorial 값을 구할 변수
BigInteger numFac = BigInteger.valueOf(1);
// 0이 몇 개인지 세줄 변수
int count = 0;
// Factorial 값을 구한다.
for (int i = 1; i <= num; i++) {
numFac = numFac.multiply(BigInteger.valueOf(i));
}
// 10씩 나눠주면서 0이 몇 개인지 세준다.
while(true){
if (numFac.remainder(BigInteger.valueOf(10)) != BigInteger.ZERO){
break;
}else{
numFac = numFac.divide(BigInteger.valueOf(10));
count++;
}
}
sb.append(count);
System.out.println(sb.toString());
}
}
느낀점
Factorial 문제는 값이 어마어마하게 커지기 때문에 거의 모든 경우에 Biginteger를 써야한다. Biginteger는 단순연산도 모두 메서드를 써야해서 주의가 필요하다.
첫 for문으로 Factorial 값을 구한뒤, while문을 돌려 맨 뒤에서부터 10씩 나눠주면서 0의 갯수를 세어주면 됐다. 이 문제는 문제 이해하는게 제일 어려웠다.