Cod sursa(job #86170)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 23 septembrie 2007 19:26:38
Problema Factorial Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#include<math.h>

long long aux,sol,vb1,lim1,lim2,zero,p;

int catezero(long long mij)
{
	zero=0;
	aux=mij;
	while(aux>0)
	{
		zero=zero+aux/5;
		aux=aux/5;
	}
if(zero>p) {lim2=mij+1; return 0;}
else
if(zero<p) {lim1=mij; return 0;}
else return 1;
}

int main()
{
	freopen("fact.in","r",stdin);
	freopen("fact.out","w",stdout);
	scanf("%lld",&p);
	if(p==0) {printf("1"); return 0;}
	aux=p;
	while(aux%5==0)
	{
		aux=aux/5;
		vb1=1;
	}
	if(aux==1 && vb1==1) {printf("-1"); return 0;}

	lim1=1;
	lim2=25*p;
	while(zero!=p)
	{
		if(catezero((lim1+lim2-1)/2)==1)
			sol=(lim2+lim1-1)/2;
		if(lim1+1==lim2 || lim1==lim2 || lim1+2==lim2)
		{
			sol=(lim1+lim2)/2-2;
			zero=p;
		}
	}
	while(sol%5!=0)
		sol--;
printf("%lld",sol);	
return 0;
}