Cod sursa(job #2065707)

Utilizator nic_irinaChitu Irina nic_irina Data 14 noiembrie 2017 01:34:03
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long formula (long long x)
{
    long long k=5, S=0;
    while (k <= x)
    {
        S += x/k;
        k *= 5;
    }
    return S;
}

long long caut_bin (long long st, long long dr, int P)
{
    if(st <= dr)
    {
        long long m = st + (dr - st)/2; //prevent overflow
        long long temp = formula(m);
        if(temp == P)
            return m;
        else
            if(temp > P)
                return caut_bin(st, m-1, P);
            else
                if(temp < P)
                    return caut_bin(m+1, dr, P);
    }
    return -1;
}

int main()
{
    int P;
    fin>>P;
    if(P == 0)
    {
        fout<<1;
        return 0;
    }
    long long dr = 100000000000000;
    long long sol = caut_bin(1, dr , P);
    if (sol == -1)
        fout<<sol;
    else
    {
        sol -= (sol%5);
        fout<<sol;
    }
    fin.close();
    fout.close();
    return 0;
}