본문 바로가기

백준

이런저런 문제들 #1676: 팩토리얼 0의 개수 [JAVA]

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);

	}
}