Cod sursa(job #548996)

Utilizator ukkoRadu Adrian-Leonard ukko Data 8 martie 2011 00:57:17
Problema Factorial Scor 60
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>
#include<stdlib.h>

int nearPow5(int n)
{
	int aux = n, k = 0;
	while(aux >= 5){
		aux /= 5;
		k++;
	}
	return k;
}
int pow(int n, int k)
{
	int i, aux = n;
	if(k == 0)
		return 1;
	for(i = 1; i < k; i++)
		n = n * aux;
	return n;	
}

int calc(int P)
{
	int k = P * 5, q = 0, aux;
	int n = nearPow5(k);
	int m = pow(5,n), acc = 0, i;
	for(i = 0; i < n; i++)
		acc = acc + pow(5, i); 
	q = acc;
	if(q == P)
		return m;
	m += 5;
	while(q != P) {
		aux = m;
		while(aux) {
			if(aux % 5 == 0){
				aux /= 5;
				q++;
			}
			else
				break;
		}
		if(q == P)
			return m;	
		else if(q > P)
			return -1;
		m += 5;
	}
	return m;
}

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