Pagini recente » Cod sursa (job #1545571) | Cod sursa (job #299783) | Cod sursa (job #1121758) | Cod sursa (job #886792) | Cod sursa (job #969901)
Cod sursa(job #969901)
#include <stdio.h>
#include <stdlib.h>
int putericinci[14];
int zerouri(int n)
{
int z=0;
int i=1;
if (n>=5) {
while (n/putericinci[i]>0)
{
z=z+(n/putericinci[i]);
i++;
}
}
return z;
//functia returneaza cate zerouri are n!
}
int binarysearch(int A,int B,int P)
{
int ok=-1;
// printf("pas");
if (zerouri(5*A)==P) ok=A;
else if (zerouri(5*B)==P) ok=B;
else if ((A!=B) && (A+1 !=B))
{
if ((zerouri(5*((A+B)/2)))>=P) ok=binarysearch(A,(A+B)/2,P);
else ok=binarysearch((A+B)/2 ,B,P);
}
return ok;
//cauta binar un numar x intre 5A si 5B pt care zerouri(5x)=p
}
int main()
{
int p;
int ok=1;
putericinci[0]=1;
for (ok=1;ok<=13;ok++) putericinci[ok]=5*putericinci[ok-1];
FILE *f;
FILE *g;
f=fopen("fact.in","r");
g=fopen("fact.out","w");
fscanf(f,"%d",&p);
if (p==0) ok=1;
else if (binarysearch(0,p+2,p)==-1) ok=-1;
else ok=5*binarysearch(0,p+2,p);
fprintf(g,"%d",ok);
return 0;
}