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.io.*;

class Researcher {
	int n;
	int c[] = {0,0,0};

	Researcher(int n) {
		this.n = n;
	}

	int Two() {
		while (this.n%2==0) {
			c[2]++;
			this.n /= 2;
		}
		return c[2];
	}

	int Five() {
		while (this.n%5==0) {
			c[1]++;
			this.n /= 5;
		}
		return c[1];
	}

	int Ten() {
		while (this.n%10==0) {
			c[0]++;
			this.n /= 10;
		}
		return c[0];
	}
}

class Main {
	public static void main(String args[]) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String buf;

		try {
			while ((buf = br.readLine()).equals("0")==false) {
				int c[] = {0,0,0};
				int n = Integer.parseInt(buf);
				for (int i=1;i<=n;i++) {
					Researcher r = new Researcher(i);
					c[0] += r.Ten();
					c[1] += r.Five();
					c[2] += r.Two();
				}
				System.out.println(c[0]+Math.min(c[1],c[2]));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}