Cod sursa(job #1243588)

Utilizator hanganflorinHangan Florin hanganflorin Data 16 octombrie 2014 01:15:29
Problema Factorial Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
using namespace std;

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

int st = 1, dr = 1000000000;
int p, v, m;
const int d[] = { 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625 };
int Calculeaza(int x);
void Gasit(int x);

int main()
{
    is >> p;
    if ( p == 0 )
        os << 1;
    else
    {
        while ( st <= dr )
        {
            m = st + (dr-st)/2;
            v = Calculeaza(m);
            if ( p == v )
            {
                Gasit(m);
                break;
            }
            if ( v < p )
                st = m + 1;
            else
                dr = m - 1;

        }
        if ( st > dr )
            os << -1;
    }
    is.close();
    os.close();
    return 0;
}
int Calculeaza(int x)
{
    for ( int i = 0; i < 9; ++i )
        if ( d[i] <= x && d[i+1] > x )
            return ((x / 5) + i);
    if ( x >= 9765625 )
        return ((x / 5) + 9);
}
void Gasit(int x)
{
    while ( x % 5 != 0 )
        x--;
    os << x;
}