Cod sursa(job #439377)

Utilizator crushackPopescu Silviu crushack Data 11 aprilie 2010 15:45:05
Problema Factorial Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
const long long fin = 2000000000;
int nr5(long);
long long bsearch(int,long long,long long);

int main()
{
	int p;
	long long n;
	freopen("fact.in","r",stdin);
	freopen("fact.out","w",stdout);
	scanf("%lld",&p);
	n= bsearch(p,1,fin);
	while (n%5 && n!=-1) n--;
	printf("%lld\n",n);
	return 0;
}

int nr5(long long a)
{
	int x=5;
	int c=0;
	while (x<=a)
	{
		c+= a/x;
		x*=5;
	}
	return c;
}

long long bsearch(int x,long long ls,long long ld)
{
	if (ls>=ld) return (long long)-1;
	long long m=(ls+ld)/2;
	int ax= nr5( m );
	if (ax==x)
		return m;
	if (ax>x)
		return bsearch(x,ls,m-1);
	else 
		return bsearch(x,m+1,ld);
}