Cod sursa(job #397447)

Utilizator gandruAlexandru Gheorghiu - UPB gandru Data 16 februarie 2010 22:41:01
Problema Factorial Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <math.h>

long nrZero (long n)
{
	long cinci=1,s=0;
	while(1)
	{
		cinci=cinci*5;
		if (n/cinci>0) s+=n/cinci;
		else break;
		
	}
	return s;
}


int main()
{
	long p,nr,lim_inf=5,lim_sup=1000000000;
	FILE *f,*g;
		
	f=fopen("fact.in","r");
	fscanf(f,"%li",&p);
	fclose(f);

	g=fopen("fact.out","w");
	if (p==0) nr=1;
	else
	   {
		 while(1)
		   {
  			if (nrZero((lim_inf+lim_sup)/2)<p)
				lim_inf=(lim_inf+lim_sup)/2;
			else
			if (nrZero((lim_inf+lim_sup)/2)>p)
				lim_sup=(lim_inf+lim_sup)/2;
			else
			if (nrZero((lim_inf+lim_sup)/2)==p)
			   {
			     nr=((lim_inf+lim_sup)/2)-(((lim_inf+lim_sup)/2)%5);
			     break;
			   }
			if (lim_inf==lim_sup && nrZero(lim_inf)!=p)
			   {
			     nr=-1;
			     break;
			   }
		   }	
	    }	
	fprintf(g,"%li ",nr);
	fclose(g);

	return 0;
}