Cod sursa(job #2188338)
| Utilizator | Data | 27 martie 2018 09:06:29 | |
|---|---|---|---|
| Problema | Factorial | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | bpc9 | Marime | 0.56 kb |
#include <fstream>
#include <cstdint>
int32_t zeroCount(int32_t x) {
int32_t nr{}, imp{5};
while (x >= imp) {
nr += x / imp;
imp *= 5;
}
return nr;
}
int main() {
int32_t p{};
std::ifstream{"fact.in"} >> p;
int32_t left{1}, right{5 * p}, mid{}, nr{-1};
while (left <= right) {
mid = left + (right - left) / 2;
auto zero{zeroCount(mid)};
if (zero == p)
nr = mid;
if (zero >= p)
right = mid - 1;
else
left = mid + 1;
}
std::ofstream{"fact.out"} << (p ? nr : 1);
}