Cod sursa(job #48724)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 5 aprilie 2007 00:16:03
Problema Factorial Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
// 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;
}