Cod sursa(job #29241)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 8 martie 2007 20:13:56
Problema Factorial Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>
#define FIN "fact.in"
#define FOUT "fact.out"

long P, k;
long long v, N, st, dr, m;

long long f(long long x) {
	long long p, val=0;
	for (p=5; x>p; p*=5)
		val += x/p;
	return val;
}

int main() {
	freopen(FIN, "r", stdin); 
	scanf("%ld", &P); 
	fclose(stdin);

	st = 0; dr = 0x3f3f3f3f3f3fll;

	while (st<dr) {
		m = (st+dr) / 2;
		v = f(m);
		if ( v==P )
			st = dr +1;
		if ( v<P ) 
			st = m+1;
		if ( v > P )
			dr = m-1;
	}

	if ( f(m) != P ) 
		N = -1;
	else {
		N = m/5;
		N *= 5;
	}

	if ( P==0 ) 
		N = 1;

	freopen(FOUT, "w", stdout);
	if ( N>0 ) 
		printf("%lld\n",N);
	if ( N==0 )
		printf("1\n");
	if ( N<0 ) 
		printf("-1\n");
	fclose(stdout);
	return 0;
}