Cod sursa(job #2281217)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 11 noiembrie 2018 18:19:36
Problema Factorial Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("fact.in");
ofstream g("fact.out");
int verifica_zero( long long mijloc)
{
    long long suma = 0, produs = 5;
    //calculez numarul de zerouri
    while( mijloc >= produs)
    {suma = suma + mijloc / produs;
    produs = produs * 5;
    }
    return suma;
}
long long nr= -1;
void cautare_binara0(long long l, long long r, long long p)
{
    long long mijloc;
    if(l <= r)
    {
        mijloc = (l + r) / 2;

        //daca am ajuns la nr p de zerouri cerute si nr de zerouri al elementului de dinaintea celui gasit
        //are mai putine zerouri decat p
        if( verifica_zero(mijloc) == p && verifica_zero(mijloc - 1) < p)
        {
            //memorez numarul care respecta cerinta si ies din subprogram
            nr = mijloc;
            return;
        }
        //in caz contrar, apelez recursiv partea din stanga sau dreapta a vectorului
        if( verifica_zero(mijloc) >= p)
            cautare_binara0(l, mijloc - 1, p);
            else cautare_binara0(mijloc + 1, r, p);

    }

}
int main() {
long long p;
f >> p;
//fac doua cazuri specile pentru 0 si 1
if(p == 0 ) g << 1;
else
{
    if(p == 1) g << 5;
    else
    {
        cautare_binara0(1, 100000008, p);
        g << nr;
    }
}
    return 0;
}