Cod sursa(job #789905)

Utilizator vld7Campeanu Vlad vld7 Data 19 septembrie 2012 21:29:52
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

using namespace std;

FILE *f = fopen ("fact.in","r");
FILE *g = fopen ("fact.out","w");

int P;

int getValue(int val)
{
	int rez = 0;
	
	do {
		val /= 5;
		rez += val;
	} while (val / 5 != 0);
	
	return rez;
}

int bsearch(int lo, int hi)
{
	int value, mid;
	
	while (lo <= hi) {
		mid = hi - (hi - lo) / 2;
		value = getValue(mid);
		if (value >= P)
			hi = mid - 1;
		else
			lo = mid + 1;
	}
	
	value = getValue(mid);
	if (value < P) {
		mid++;
		value = getValue(mid);
	}
	if (value == P)
		return mid;
	else
		return -1;
}

int main()
{
	int SOL;
	
	fscanf (f, "%d", &P);
	if (P == 0)
		SOL = 1;
	else if (P == 1)
		SOL = 5;
	else
		SOL = bsearch(1, (1 << 31) - 1);
	
	fprintf (g, "%d\n", SOL);
	
	fclose(f);
	fclose(g);
	
	return 0;
}