Cod sursa(job #561266)

Utilizator sebii_cSebastian Claici sebii_c Data 19 martie 2011 14:45:02
Problema Factorial Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#define INFILE "fact.in"
#define OUTFILE "fact.out"

int P;

int digits(int N)
{
	int dig = 0;
	do {
		dig++;
		N /= 10;
	} while (N);
	return dig;
}

int power(int x, int y)
{
	int i;
	int res = 1;
	for (i=0; (1<<i) <= y; ++i) {
		if (((1<<i) & y) > 0)
			res = (res * x);
		x = (x * x);
	}
	return res;
}

int factorial(int N)
{
	int i, j;
	int count = 0;
	int dig = digits(N);
	for (i=1; i<=N; ++i)
		if (i%5 == 0) {
			count++;
			for (j = 2; j <= dig; ++j)
			if ((((1<<j) * i) % power(10, j)) == 0 && (((1<<(j+1)) * i) % power(10, j+1)) != 0 )
					count += j-1; 
		}
	return count;
}

int main()
{
	freopen(INFILE, "r", stdin);
	freopen(OUTFILE, "w", stdout);
	scanf("%d", &P);
	int count = 0, i = 0;
	for (i=1; ; ++i) {
		count = factorial(i);
		if (count == P) {
			printf("%d\n", i);
			break;
		}
		if (count > P) {
			printf("-1");
			break;
		}
	}
	return 0;
}