Cod sursa(job #2549009)

Utilizator PoseidonGeminiPoseidonGemini PoseidonGemini Data 17 februarie 2020 11:06:47
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>

unsigned long long int Numar0;
unsigned long long int Rezultat;

int main()
{
    unsigned long long int Control = 0;
    // unsigned long int RezultatPrimitiv = 5;
 
    unsigned long long int st, dr = 2000000000, mij, p;

    FILE * FFACT = fopen("fact.in", "r");

    fscanf(FFACT, "%llu", &Numar0);

    fclose(FFACT), FFACT = fopen("fact.out", "w");

    if (Numar0 == 0) {fprintf(FFACT, "1"); return 0;}

    while (st <= dr)
    {
        mij = ((st + dr) >> 1), Control = 0, p = 5;

        while (mij >= p) Control += mij / p, p *= 5;

        if (Control == Numar0) break;
        else if (Control < Numar0) st = mij + 1;
        else dr = mij - 1;
    }

/* TOO SLOW
    while (Control < Numar0)
    {
        Rezultat = RezultatPrimitiv;

        while (RezultatPrimitiv % 5 == 0) ++Control, RezultatPrimitiv /= 5;

        RezultatPrimitiv = Rezultat + 5;
    }
*/

    if (Control == Numar0) fprintf(FFACT, "%llu", mij - mij % 5);
    else fprintf(FFACT, "-1");

    /*
    if (Control == Numar0) fprintf(FFACT, "%lu\n", Rezultat);
    else fprintf(FFACT, "-1\n");
    */

    fclose(FFACT);

    return 0;
}