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 C (judge verdict: Time Limit Exceeded)

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#include<string.h>
#include<limits.h>

int  hantei(char str[],int i){
	switch(str[i]){
		case '0':
		return 0;
		break;
		
		case '1':
		return 1;
		break;
		
		case '2':
		return 2;
		break;
		
		case '3':
		return 3;
		break;
		
		case '4':
		return 4;
		break;
		
		case '5':
		return 5;
		break;
		
		case '6':
		return 6;
		break;
		
		case '7':
		return 7;
		break;
		
		case '8':
		return 8;
		break;
		
		case '9':
		return 9;
		break;
	}
}

int fx(int n){
	if(n!=0){
		return n*fx(n-1);
	}
	else return 1;
}

int main(){
	int num=1,n=0,i,j,k=0;
	int ans[100000]={0},flag=0,count=0;
	
	
	while(scanf("%d",&n)!=EOF){
		if(n==0)break;
		ans[0]=1;
	for(i=1;i<=n;i++){
		for(j=0;j<=k;j++){
			ans[j]*=i;
		}
		
		for(j=0;j<=k;j++){
			if(ans[j]>=10){
				ans[j+1]+=ans[j]/10;
				ans[j]%=10;
				if(j==k)k++;
			}
		}
	}
	for(i=0;ans[i]==0;i++)count++;
	printf("%d\n",count);
		for(i=0;i<=k;i++)ans[i]=0;
		count=0;
		num=1;
		k=0;
	}
return 0;
}