Cod sursa(job #315494)

Utilizator andreioneaAndrei Onea andreionea Data 16 mai 2009 01:31:59
Problema Factorial Scor 65
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>
long long p;
unsigned long long fact(unsigned long long k)
{unsigned long long rez=0,cat;
 cat=k/5;
 while(cat)
	{rez+=cat;
	 cat/=5;
	 }
 return rez;
}
int main()
{FILE *f=fopen("fact.in","r");
 FILE *g=fopen("fact.out","w");
 unsigned long long st,dr,c,aux;
 fscanf(f,"%lld",&p);
 fclose(f);
 if(p==0)
   {fprintf(g,"1");
			 fclose(g); 
			 return 0;
			 }
 dr=1<<31;
 dr/=5;
 dr-=dr%5;
 st=0;

 while(st<dr)
	{
          if(st==dr)
		if(fact(st)!=p) 
			{fprintf(g,"-1");
			 fclose(g); 
			 return 0;
			 }
		else 
			{fprintf(g,"%lld",st*5);
			 fclose(g); 
			 return 0;
			 }
 	 else 
	    {c=st+dr; c>>=1;
	     aux=fact(c*5);
	     if(aux<p) st=c+1;
		else if(aux>p) dr=c-1;
			else 	
			{fprintf(g,"%lld",c*5);
			 fclose(g); 
			 return 0;
			 }
	     }
	}
 fprintf(g,"-1");
 fclose(g); 
 return 0;
}