Cod sursa(job #2638542)
Utilizator | Data | 28 iulie 2020 17:10:54 | |
---|---|---|---|
Problema | Factorial | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.65 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("fact.in");
ofstream g("fact.out");
int64_t p, sol, st, dr, zeros(int64_t);
int main()
{
f >> p;
sol = -1;
st = 1, dr = 1000000000;
while(st <= dr)
{
int64_t mi = (st + dr) / 2;
int64_t nr = zeros(mi);
if(nr == p)
{
sol = mi;
dr = mi - 1;
}
else if(nr < p)
st = mi + 1;
else dr = mi - 1;
}
g << sol;
return 0;
}
int64_t zeros(int64_t nr)
{
int64_t ret = 0;
for(int64_t k = 5; nr / k; k *= 5)
ret += nr / k;
return ret;
}