Cod sursa(job #1799100)

Utilizator andreiugravuFMI Andrei Zugravu andreiugravu Data 5 noiembrie 2016 19:21:35
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
//Factorial

#include <fstream>

using namespace std;

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

#define DMAX 1000000000

long long N, P;

long long nrZerouri(long long nr) {
    long long nrzero = 0, put5 = 5;
    while(nr/put5 > 0) {
        nrzero += nr/put5;
        put5 *= 5;
    }
    return nrzero;
}

long long cautareBinara(long long left, long long right) {
    if(left == right - 1 || right == left - 1) return 0;
    if(left <= right) {
        long long middle = (left + right)/2, nr;
        nr = nrZerouri(middle);
        if(nr == P) return middle;
        else if(nr > P) return cautareBinara(left, middle-1);
        else return cautareBinara(middle+1, right);
    }
    return 0;
}

int main()
{
    fin>>P;

    if(P == 0) { fout<<1; return 0; }
    N = cautareBinara(0, DMAX);
    if(N == 0) { fout<<-1; return 0; }

    while(nrZerouri(N) == P) N--;
    fout<<N+1;

    fin.close();
    fout.close();

    return 0;
}