Cod sursa(job #476933)

Utilizator Astrid28Ruxandra Cohal Astrid28 Data 12 august 2010 19:42:52
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<iostream>

using namespace std;

ifstream fin("fact.in");
ofstream fout("fact.out");

long p, n;

//calculand la ce putere apare 5 in descopunerea in fact. primi
//a lui x! det. nr. de 0 de la sf. lui x!
long nr_zerouri( long x )
{
	long x2 = x, div5 = 5, putere=0;
	while ( x2 >= 5 )
	{
		putere += x / div5;
		x2 /= 5;
		div5 *= 5;
	}
	return putere;
}

//caut binar n-ul cerut
void cautaN( long a, long b, int p )
{
	long c = (a+b)/2, zero;
	
	if ( a <= b )
	{
		zero = nr_zerouri(c);
		if ( zero == p )
			n = c;
		else
			if ( zero <= p )
				cautaN( c+1, b, p );
			else
				cautaN( a, c-1, p );		
	}
	else n = -1;
}

//caut cel m. mic n cu propr. data
void minimizeaza( long &n )
{
	n = (n/5)*5;
	if ( n == 0 ) n = 1;
}


int main()
{
	long a = 0, b = 410000000;
	fin >> p;

	cautaN( a, b, p );
	if ( n != -1 )
		minimizeaza( n );

	fout << n << endl;

	fin.close();
	fout.close();

	return 0;
}