Pagini recente » Cod sursa (job #1772720) | Cod sursa (job #1647599) | Cod sursa (job #795550) | Cod sursa (job #303049) | Cod sursa (job #758144)
Cod sursa(job #758144)
#include <fstream>
using namespace std;
ifstream fin ( "fact.in");
ofstream fout ("fact.out");
long cauta(long,long,long );
long nrzero (long);
long pt[14];
int main()
{
long n,m,i=0;
fin>>n;
pt[1]=5;
pt[0]=1;
for ( i=1;i<13;i++)
pt[i+1]=pt[i]*5;
m=n*5;
if ( n==0 )
fout<<1;
else
{
m=cauta(1,m,n);
if ( m>0)
while ( m%5 )
m--;
fout<<m;
}
fin.close();
fout.close();
return 0;
}
long cauta (long a, long b , long nrz )
{
long aux;
//fout<<"cauta primeste "<<a<<" "<<b<<" "<<" "<<nrz<<"\n";
aux=nrzero((a+b)/2);
if ( a!=b )
{
if ( nrz < aux)
{
//fout<<"cauta primeste "<<a<<" "<<b<<" "<<" "<<nrz<<"si returneaza cauta de "<<a<<" "<<(a+b)/2<<" "<<nrz<<"\n";
return cauta(a,(a+b)/2,nrz);
}
else
if (nrz>aux)
{
//fout<<"cauta primeste "<<a<<" "<<b<<" "<<" "<<nrz<<"si returneaza cauta de "<<(a+b)/2<<" "<<b<<" "<<nrz<<"\n";
return cauta(((a+b)/2)+1,b,nrz);
}
else
{
//fout<<"cauta returneaza"<<(a+b)/2<<" \n";
return (a+b)/2;
}
}
else
{
if ( aux==nrz )
return a;
else
return -1;
}
}
long nrzero ( long x )
{
long k=0;
int i;
for (i=1;(i<=13)&&(x/pt[i]);i++)
k=k+x/pt[i];
//fout<<x<<" factorial are "<<k<<"zerouri \n";
return k;
}