Cod sursa(job #549215)

Utilizator ukkoRadu Adrian-Leonard ukko Data 8 martie 2011 11:26:07
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int func(int n)
{
	int k = (int)(log(n) / log(5));
	int i = 1, q = 0, j = 1;	
	for(i = 1; i <= k; i++){
		j *= 5;	
		q += n/j;
	}
	return q;
}
/*
int calc(int st, int dr, int P)
{
	int mij = (st + dr)/ 2;
	if(func(mij) - P)
		return mij;	
	if(func(mij) < P)
		return calc(st, mij, P);
	return calc(st, mij + 1, P);
			
} 
*/
int calc(int P)
{
	int k = P * 5, aux, r;			
	k = (k / 5) * 4; 
	r = (k % 5);
	k += (5 - r);
	int q = func(k);
	printf("%d\n", q);
	if(P == 0)
		return 1;
	if(q == P)
		return k;
	k += 5;
	while(q != P) {
		aux = k;			
		while(aux % 5 == 0) {
			q++;
			aux /= 5;
		}
		if(q == P)
			return k;
		if(q > P)
			return -1;
		k += 5;
	}	
	return k;
}

int main()
{
	FILE *f = fopen("fact.in", "r");
	FILE *g = fopen("fact.out", "w");			
	int P, i;
	fscanf(f, "%d", &P);	
//	for(i = 0; i <= P; i++ )
		fprintf(g, "%d", calc(P));
	fclose(f);
	fclose(g);
	return 0;
}