import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Zfactorial0_1676 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
/* factorial 구하기 */
int n = Integer.parseInt(br.readLine());
BigInteger factorial = new BigInteger("1"); //factorial 결과값을 BigInteger로 선언
for (int i = n; i > 0; i--) {
BigInteger temp = BigInteger.valueOf(i);
factorial = factorial.multiply(temp);
}
/* 0 개수 구하기 */
String num = factorial+"";
int result = 0;
for (int j = num.length()-1; j > 0; j--) {
if (num.charAt(j) == '0') {
result++;
} else break;
}
System.out.println(result);
}
}
팩토리얼을 구하는 과정은 어렵지 않았는데, BigInteger를 찾는게 시간이 걸렸다.
0의 개수도 뒤에서 부터 stirng을 char로 받아 0인지 확인하면 되기 때문에 어렵지 않았다.
BigInteger
BigInteger 는 아무리 큰 수라도 담을 수 있는 정수 타입이다. (최대 500! 의 값을 담아야 하는데, long은 그 수를 담지 못한다.)
선언
BigInteger bigNum = new BigInteger ("10002");
초기화 시 문자열 형식으로 입력해야 한다.
실제로는 문자열로 동작하는 형식이다.
사칙연산
BigInteger bigNum1 = new BigInteger("1000002");
BigInteger bigNum2 = new BigInteger("10002");
bigNum1.add(bigNum2); //덧셈 (+)
bigNum1.subtract(bigNum2); //뺄셈 (-)
bigNum1.multiply(bigNum2); //곱셈 (*)
bigNum1.divide(bigNum2); //나눗셈 (/)
bigNum1.remainder(bigNum2);//나머지 (%)
문자열이기 때문에, 정해진 메서드를 이용해서 계산해야 한다.
'JAVA' 카테고리의 다른 글
[JAVA][백준] 11866_요세푸스 문제 0 (Queue) (0) | 2024.05.01 |
---|---|
[JAVA][백준] 7568_덩치 (0) | 2024.04.22 |
[JAVA][백준] 2751_수 정렬하기 2 (0) | 2024.04.18 |
[JAVA][백준] 1181_단어정렬 (Comparator) (1) | 2024.04.18 |
[JAVA][백준] 10989_수 정렬하기 3 (BufferedReader) (0) | 2024.04.16 |