Cod sursa(job #340402)

Utilizator sterepavelStere Pavel sterepavel Data 14 august 2009 15:48:22
Problema Factorial Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define MY_FILE_NAME "fact"

void read_data( int *n )
{
	FILE *f = fopen( MY_FILE_NAME".in", "r" );
	fscanf( f, "%i", n );
}

void write_response( long long response )
{
	FILE *f = fopen( MY_FILE_NAME".out", "w" );
	fprintf( f, "%lli", response );
#ifdef _MSC_VER
	fprintf( stdout, "%lli\n", response );
#endif
}

void run();

int main()
{
#ifdef _MSC_VER
	unsigned int start_tick = GetTickCount();
	//time_t start_time = time( NULL );
#endif

	run();

#ifdef _MSC_VER
	//int secs = (int) (time( NULL ) - start_time);
	//printf( "***** %i secs\n", secs );
	int milis = GetTickCount() - start_tick;
	printf( "***** %i milis\n", milis );
#endif
	return 0;
}

void run()
{
	int p = 0;
	long long int k = 0;
	long long int response = 0;
	const int MAX_POWS = 12;

	read_data( &p );

	if ( 0 == p ) {
		write_response( 1 );
		return ;
	}

	k = 0;
	response = -1;
	for ( int i = 5; i <= 2000000000; i += 5 ) {
		int c = 0;
		for ( int j = i; 0 == j%5; j /= 5 )
			c++;
		k += c;
		if ( p < k ) {
			response = -1;
			break ;
		} else if ( p == k ) {
			response = i;
			break ;
		}
	}
	write_response( response );
}