Pagini recente » Cod sursa (job #660982) | Cod sursa (job #2177626) | Cod sursa (job #1160009) | Cod sursa (job #1798646) | Cod sursa (job #1837971)
/*
kpim1636
Kovacs Patrik
group: 512
http://www.infoarena.ro/problema/fact
*/
#include <fstream>
//#define CONSOLE
#ifdef CONSOLE
#include <iostream>
#define f std::cin
#define g std::cout
#endif
unsigned exponent (unsigned n, unsigned k) {
unsigned t = n / k;
unsigned a = k;
unsigned sum = 0;
while (t) {
sum += t;
a *= k;
t = n / a;
}
return sum;
}
unsigned binary_search (unsigned left, unsigned right, int p) {
if (left > right)
return -1;
/*if (left == right) {
if (exponent(left, 5) == p)
return left;
else
return -1;
}*/
unsigned mid = (left + right) / 2;
unsigned k = exponent(mid, 5);
if (k > p)
return binary_search(left, mid-1, p);
else if (k < p)
return binary_search(mid+1, right, p);
else {
unsigned t = binary_search(left, mid-1, p);
if (t != -1)
return t;
else
return mid;
}
}
int main () {
#ifndef CONSOLE
std::ifstream f ("fact.in");
std::ofstream g ("fact.out");
#endif
int p;
f >> p;
if (!p) {
g << 1;
return 0;
}
g << (int) binary_search(0, 1000000000, p);
}