Pagini recente » Cod sursa (job #955114) | Cod sursa (job #1640032) | Cod sursa (job #1696499) | Cod sursa (job #836652) | Cod sursa (job #561266)
Cod sursa(job #561266)
#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;
}