Cod sursa(job #393380)

Utilizator alexandru92alexandru alexandru92 Data 9 februarie 2010 12:53:01
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
/* 
 * File:   main.cpp
 * Author: virtualdemon
 *
 * Created on February 9, 2010, 11:32 AM
 */
#include <fstream>

/*
 *
 */
using namespace std;
typedef long long int lld; 
lld p;
int f( lld n )
{
    lld s=0, p5=5;
    for( ; ; )
    {
        s+=n/p5;
        p5*=5;
        if( 0 == n/p5 )
            break;
    }
    if( s == p  )
        return 0;
    if( s > p )
        return 1;
    return -1;
}
inline lld solve( lld left, lld right )
{
    int v;
    lld middle, value=-1;
    while( left <= right )
    {
        middle=left+(right-left)/2;
        v=f(middle);
        if( 0 == v )
        {
            if( -1 == value || value > middle )
                value=middle;
        }
        if( v >= 0 )
            right=middle-1;
        else left=middle+1;
    }
    return value;
}
int main( void )
{
    ifstream in("fact.in");
    in>>p;
    ofstream out("fact.out");
    if( !p )
    {
        out<<'1';
        return 0;
    }
    out<<solve( 1, 1LL*5*p );
    return 0;
}