Pagini recente » Cod sursa (job #172465) | Diferente pentru runda/oni_11_12_11 intre reviziile 2 si 1 | Cod sursa (job #93395)
Cod sursa(job #93395)
#include <stdio.h>
#include <stdlib.h>
int main()
{
long ver,gas,i,p,k,nr1,nr2,n,st,dr;
FILE *f1,*f2;
f1=fopen("fact.in","r");
f2=fopen("fact.out","w");
fscanf(f1,"%ld",&p);
st=0;
dr=2000000000;
gas=0;
ver=p;
while (ver%5==0)
{
ver=ver/5;
}
if (ver==1 && p!=1)
{
fprintf(f2,"-1");
fclose(f1);
fclose(f2);
exit(0);
}
while (gas!=1)
{
k=1;nr1=0;nr2=0;
while (k<48825125)
{
k=k*5;
nr1=nr1+(st-st%k)/k;
nr2=nr2+(dr-dr%k)/k;
}
if (nr1==p)
{
n=st;
gas=1;
}
if (nr2==p)
{
n=dr;
gas=1;
}
if (gas==0)
{
nr1=st+((dr-st+1)-(dr-st+1)%2)/2;
k=1;nr2=0;
while (k<48825125)
{
k=k*5;
nr2=nr2+(nr1-nr1%k)/k;
}
if (nr2==p)
{
n=nr1;
gas=1;
}
else
if (nr2>p) dr=nr1;
else st=nr1;
}
}
gas=0;
while (gas==0)
{
nr1=n-1;
nr2=0;k=1;
while (k<48825125)
{
k=k*5;
nr2=nr2+(nr1-nr1%k)/k;
}
if (nr2==p) n--;
else gas=1;
}
if (n!=0) fprintf(f2,"%ld",n);
else fprintf(f2,"1");
fclose(f1);
fclose(f2);
return 0;
}