Pagini recente » Cod sursa (job #204242) | Cod sursa (job #1717245) | Cod sursa (job #2713222) | Cod sursa (job #578) | Cod sursa (job #2281217)
#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;
}