Pagini recente » Cod sursa (job #1931671) | Cod sursa (job #2409643) | Cod sursa (job #555153) | Cod sursa (job #492513) | Cod sursa (job #48722)
Cod sursa(job #48722)
// Problema factorial
#include <stdio.h>
#define MAX 500000000
long nrz( long c )
{
long p = 0;
while( c )
{
p += c/5;
c /= 5;
}
return p;
}
int main()
{
long p;
freopen( "fact.in", "rt", stdin );
scanf( "%ld", &p );
fclose( stdin );
long st = 0;
long dr = MAX;
long n = 1;
long numarz;
long c;
while( n )
{
c = ( st + dr ) /2;
numarz = nrz( c );
if( (numarz == p ) && (st==dr) )
{
n = st;
break;
}
if( dr < st )
{
n =-1;
break;
}
if( numarz < p ) st = c+1; else dr = c-1;
}
if( n!= -1 )
{
while( n%5 != 0 ) n--;
numarz = nrz( n );
while( numarz < p )
{
n += 5;
numarz = nrz( n );
}
while( numarz > p )
{
n -= 5;
numarz = nrz( n );
}
if( numarz != p ) n = -1;
}
freopen( "fact.out", "wt", stdout );
printf( "%ld\n", n );
fclose( stdout );
return 0;
}