Problem:
階乗 II

n! = n × (n − 1) × (n − 2) × ... × 3 × 2 × 1

を n の階乗といいます。例えば、12 の階乗は

12! = 12 × 11 × 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 479001600

となり、末尾に 0 が 2 つ連続して並んでいます。

整数 n を入力して、n! の末尾に連続して並んでいる 0 の数を出力するプログラムを作成してください。ただし、n は 20000 以下の正の整数とします。

Input

複数のデータが与えられます。各データに n (n ≤ 20000) が１行に与えられます。n が 0 の時入力の最後とします。

データの数は 20 を超えません。

Output

各データに対して n! の末尾に連続して並んでいる 0 の数を１行に出力して下さい。

Sample Input

2
12
10000
0

Output for the Sample Input

0
2
2499

Solution in JAVA (judge verdict: Accepted)

import java.math.BigInteger;
import java.util.Scanner;

class Main {

	public static void main(String[] args) {
		Scanner sc = null;
		try {
			sc = new Scanner(System.in);

			int num = 0;
			while (sc.hasNextInt() && (num = sc.nextInt()) != 0) {
				BigInteger factorial = calc(num);

				char[] c = String.valueOf(factorial).toCharArray();
				int count = 0;
				for (int i = c.length - 1; i > 0; i--) {
					if ('0' != c[i]) {
						break;
					}
					count++;
				}

				System.out.println(count);
			}
		} finally {
			sc.close();
		}
	}

	public static BigInteger calc(int num) {
		BigInteger result = new BigInteger("1");
		BigInteger bigNum = new BigInteger(String.valueOf(num));
		for (int i = 0; i < num; i++) {
			result = result
					.multiply(bigNum.subtract(new BigInteger(String.valueOf(i))));
		}
		return result;
	}
}