Pagini recente » muntele_suferintei_2 | Cod sursa (job #698100) | Cod sursa (job #3129951) | Cod sursa (job #554942) | Cod sursa (job #2437165)
#include <fstream>
#define xmax (1<<30)
using namespace std;
ifstream f("fact.in");
ofstream g("fact.out");
int p;
int put[15]={0,6,31,156,781,3906,19531,97656,488281,2441406,12207031,61035156,305175781};
int descomp(int x)
{
int s=0;
while(x>25)
{
int p1=5,nr=0;
while(p1*5<=x)
p1*=5,nr++;
s+=put[nr];
x-=p1;
}
if(x==25)
s+=6;
else s+=x/5;
return s;
}
int caut_bin(int st,int dr)
{
int mij=(st+dr)>>1;
while(st<=dr)
{
if(descomp(mij)<p)
st=mij+1;
else if(descomp(mij)>p) dr=mij-1;
else return mij;
mij=(st+dr)>>1;
}
return -1;
}
void read()
{
f>>p;
int x=caut_bin(1,xmax);
if(x==-1)
g<<x<<'\n';
else
{
while(x%5&&x>1)
--x;
g<<x<<'\n';
}
}
int main(void)
{
descomp(125);
read();
}