Cod sursa(job #645635)

Utilizator GrampaLivadariu Mihai Andrei Grampa Data 10 decembrie 2011 01:14:24
Problema Factorial Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <fstream>
#include <math.h>
using namespace std;

int solve( int p ) {
	int i;
	int power;
	int times;
	int inverseP = 0;

	if( p == 0 ) return 1;
	if( p == 1 ) return 5;

	int aprox = ( 5 * p );
	int maxPower = (int)( floor( logf( (float)aprox ) / logf( 5.0f ) ) );

	for( i = maxPower; i > 1; --i ) {
		power = (int)( pow( 5.0f, i ) );
		times = aprox / power;
		if( aprox < times * ( power + 5 ) ) --times;
		aprox -= times * 5;
		inverseP += times;
	}
	
	if( aprox / 5 + inverseP > p ) return - 1;

	return aprox;
}

int main() {
	int p;

	fstream f( "fact.in", ios::in );
	f >> p;

	fstream g( "fact.out", ios::out );
	g << solve( p );

	return 0;
}