Cod sursa(job #1724949)

Utilizator radoneNeacsu Radu-Stefan radone Data 4 iulie 2016 16:47:46
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("fact.in");
ofstream out("fact.out");

int p;

int vf( int x )
{
    int nr = 0;
    for( int i = 5; i <= x; i = i*5 )
        nr += x/i;
    return nr;
}

int cbin( int stanga, int dreapta )
{
    if( stanga == dreapta )
        return stanga;
    else
    {
        int mij = stanga + (dreapta - stanga)/2;

        if( vf( mij ) > p )
            return cbin( stanga, mij );
        else
            return cbin( mij + 1, dreapta );
    }
}

int main()
{
    in >> p;

    if( p == 0 )
        out << 1;
    else{
        int r = cbin( 1, p*5 );

        if( vf(r) == p )
        {
            while( vf(r-1) == p )
                r--;
            out << r;
        }
        else if( vf(r) < p )
        {
            while( vf(r) < p )
                r++;
            if( vf(r) == p )
                out << r;
            else
                out << -1;
        }
        else
        {
            while( vf(r) > p )
                r --;
            if( vf(r) == p )
            {
                while( vf( r-1) == p )
                    r--;
                out << r;
            }
            else
                out << -1;
        }
    }
    return 0;
}