Cod sursa(job #220132)

Utilizator cristimateiToader Cristian-Matei cristimatei Data 9 noiembrie 2008 15:46:31
Problema Factorial Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>


int fact_zero(unsigned long int a) // calculeaza cate 0-uri are fact de a
{
	unsigned long int i = 5, z = 0;

	while(a/i != 0)
	{
		z = z + a/i;
		i = i * 5;
	}

	return z;

}//works

int div_5(unsigned long int a)
{
	unsigned long int i;
	for(i=a; i>0; i--)
		if(i%5 == 0)
		{
			printf("%lu",i);
			return 1;
		} 

	printf("error!");
	return 0;
} //works

int main()
{
	unsigned long int a = 1, b = 100000000, m, cfr_0, stefan;
	
	freopen ("fact.in","r",stdin);
	freopen ("fact.out","w",stdout);
	scanf("%lu", &cfr_0); //citesc cate cfr 0 vreau sa aiba fact    


//	printf("%lu",fact_zero(40010));
	if(cfr_0 >= 0 && cfr_0<=100000000)
		if(cfr_0 == 0) printf("1");
		else
			while(a <= b)
			{
				m = a + (b-a)/2;  //mid = lo + (hi-lo)/2;
				stefan = fact_zero(m);
	
				if(stefan < cfr_0)
					a = m+1;
				else if(stefan > cfr_0)
				   	b = m-1;
				else //(stefan == cfr_0) 
				{
					div_5(m); 
					return 0;
				}
			}           
	else printf("-1");
	printf("-1");
	return 0;
}