Pagini recente » Cod sursa (job #739817) | Cod sursa (job #1685558) | Cod sursa (job #11987) | Cod sursa (job #1337785) | Cod sursa (job #674312)
Cod sursa(job #674312)
#include<stdio.h>
FILE *f , *g ;
long n , p , c ;
bool sw;
void citire();
void solve();
int fact(long n);
void tipar();
int main()
{
citire();
solve();
tipar();
return 0;
}
void citire()
{
f=fopen("fact.in" , "r" );
fscanf(f , "%ld" , &p );
fclose(f);
}
void solve()
{
if(p == 0)
{
sw = 1;
n = 1;
}
else
{
int ls = 2 , ld = 2000000000 , mijl ;
while(ls < ld)
{
mijl = (ls+ld)/2;
c = fact(mijl);
if(c == p)
{
n = mijl;
sw = 1;
break;
}
else
if(c > p)
ld = mijl-1;
else
ls = mijl+1;
}
}
}
void tipar()
{
g=fopen("fact.out" , "w" );
if(!sw)
fprintf(g , "-1");
else
{
while(n %5)
n--;
if(n==0)
n++;
fprintf(g , "%ld" , n );
}
fclose(g);
}
int fact(long n)
{
int nr2 = 0 , nr5 = 0 , d;
d = 2;
while(n/d)
{
nr2+=n/d;
d*=2;
}
d = 5;
while(n/d)
{
nr5+=n/d;
d*=5;
}
if(nr2 < nr5)
return nr2;
return nr5;
}