Cod sursa(job #1024747)

Utilizator gabriel.badeaGabriel Badea gabriel.badea Data 9 noiembrie 2013 00:11:03
Problema Factorial Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<iostream>
#include<stdio.h>
#define Nmax 100000000
using namespace std;


int P;

void search_number(int low, int high)
{
	int nr5, putere5 = 5;
	int x = ( low + high ) / 2;

	nr5 = x / 5;

	while(true)
	{
		putere5 *= 5;
		if(x / putere5 == 0)
			break;
		nr5 = nr5 + ( x / putere5 );
	}
	if(nr5 == P)
	{
		int q = x / 5;
		x = q * 5;
		cout << x << endl;
	}
	else if(nr5 < P)
			search_number((low+high)/2, high);
		else
			search_number(low, (low+high)/2);
}
 
int main()
{
	int upper_bound = 100000000;
	int lower_bound = 0;
	int sol;
    freopen("fact.in","r", stdin);
    freopen("fact.out", "w", stdout);
 
    cin >> P;
	if(P == 0)
	{
		cout << '1' << endl;
		return 0;
	}

	while(true)
	{
		int nr5, putere5 = 5;
		int x = ( lower_bound + upper_bound ) / 2;

		nr5 = x / 5;

		while(true)
		{
			putere5 *= 5;
			if(x / putere5 == 0)
				break;
			nr5 = nr5 + ( x / putere5 );
		}
		if(nr5 == P)
		{
			sol = x;
		}
		if(lower_bound == upper_bound)
			break;

		if(nr5 < P)
		{
			lower_bound = (lower_bound + upper_bound)/2 + 1;
		}
		else
		{
			upper_bound = (lower_bound + upper_bound)/2 - 1;
		}
	}
	cout << sol << endl;
    return 0;
}