Pagini recente » Cod sursa (job #997399) | Cod sursa (job #1827726) | Cod sursa (job #2169998) | Cod sursa (job #2171754) | Cod sursa (job #1253604)
#include <fstream>
#define MAX 100000000
using namespace std;
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
int f(int m)
{
while(m%5)m--;
return maxim(m,1);
}
int numarzerouri(long int c)
{
int b=5,nrz=0;
while(c/b)nrz+=c/b,b*=5;
return nrz;
}
int main()
{
int p,nr;
int st,dr,m;
ifstream fin("factorial.in");
ofstream fout("factorial.out");
fin>>p;// P cifre de 0 pt n!
st=1;
dr=MAX;
while(st<=dr)
{
m=(st+dr)>>1;
// se imparte numarul la 2. m este deplasat la dr cu 1
/*de ex 10 in baza 10 convertit in baza 2 este 1010 10>>1 este echivalent co 101 in baza 2 adica 5 in baza 10*/
nr=numarzerouri(m);
if(nr==p)
{
fout<<f(m);
return 0;
}
else if(nr>p)dr=m-1;
else st=m+1;
}
fin.close();
fout.close();
return 0;
}