Cod sursa(job #340406)

Utilizator sterepavelStere Pavel sterepavel Data 14 august 2009 16:12:38
Problema Factorial Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 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;
	int i = 0;
	long long int k = 0;
	long long int response = -1;

	read_data( &p );

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

	if ( p < 100000000 ) {
		i = 5;
		k = 0;
	} else {
		i = 400000015;
		k = 99999999;
	}
	

	for ( 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 ) {
#ifdef _MSC_VER
			printf( "->>  p: %i\n", p );
			printf( "->>  i: %i\n", i );
			printf( "->>  k: %i\n", k-c );
			printf( "\n" );
#endif
			response = i;
			break ;
		}
	}
	write_response( response );
}