Pagini recente » Cod sursa (job #660930) | Cod sursa (job #2879622) | Cod sursa (job #1298878) | Cod sursa (job #117959) | Cod sursa (job #206360)
Cod sursa(job #206360)
#include <stdio.h>
#include <math.h>
unsigned long p;
FILE *f, *g;
//calculeaza cate zerouri are la final x!
unsigned long zerouri(int x)
{
unsigned long i=5, s=0;
while (floor(x/i)>0)
{
s+=floor(x/i);
i*=5;
}
return s;
}
void binsearch(int a, int b)
{
unsigned long zero;
int i, m;
if (a>b)
{
fprintf(g, "-1");
return;
}
m=(a+b)/2;
zero=zerouri(m);
if (zero<p) binsearch(m+1, b);
if (zero>p) binsearch(a, m-1);
if (zero==p)
{
for (i=a; i<=m; i++)
if (zerouri(i)==p)
{
fprintf(g, "%d", i);
return;
}
}
}
void det(unsigned long p)
{
unsigned long i=1, zero;
//printf("intru\n");
//printf("p=%lu\n", p);
zero=zerouri(i);
//printf("zero=%lu\n", zero);
while (zero<p)
{
//printf("zero=%lu\n", zero);
i*=5;
zero=zerouri(i);
}
//printf("i/5=%d i=%d\n", i/5, i);
if (i>=5)
binsearch(i/5, i);
else
fprintf(g, "1");
// printf("rez=%lu\n", zero);
// return zero;
}
int main()
{
f=fopen("fact.in", "r");
fscanf(f, "%lu", &p);
g=fopen("fact.out", "w");
det(p);
getchar();
return 0;
}