Cod sursa(job #645643)

Utilizator GrampaLivadariu Mihai Andrei Grampa Data 10 decembrie 2011 02:09:37
Problema Factorial Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>
using namespace std;

unsigned long trailing_zeros( unsigned long n ) {
	unsigned long result = 0;
	unsigned long power = 5;

	while( n / power >= 1 ) {
		result += n / power;
		power *= 5;
	}

	return result;
}

unsigned long solve( unsigned long p ) {
	unsigned long a = 0;
	unsigned long b = 5 * p;
	unsigned long c = 0;
	unsigned long zeros;

	while( a < b && ( b - a > 1 ) ) {
		c = ( b + a ) / 2;
		zeros = trailing_zeros( c );
		if( zeros == p ) return ( c - c % 5 );
		if( zeros > p ) b = c;
		else a = c;
	}

	return -1;
}

int main() {
	unsigned long p;

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

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

	return 0;
}