Pagini recente » Cod sursa (job #1881105) | Cod sursa (job #3225128) | Cod sursa (job #878044) | Cod sursa (job #2088684) | Cod sursa (job #1558873)
#include <fstream>
#include <cstdio>
int getFiveFactorCount(int n) {
int count = 0;
while (n)
count += (n /= 5);
return count;
}
int factorial(int p) {
int position = 1, offset = 0, best = -1;
if (p == 0)
return position;
for (offset = 1; offset < 5 * p; offset *= 2)
continue;
for (offset /= 2; offset; offset /= 2) {
int zeros = getFiveFactorCount(position + offset);
if (zeros == p)
best = position + offset;
else if (p > zeros)
position += offset;
}
if (getFiveFactorCount(position) == p)
return position;
return best;
}
int main() {
char const * const inputFile = "fact.in",
* const outputFile = "fact.out";
std::ifstream in(inputFile);
std::ofstream out(outputFile);
int p = 0;
while (in >> p)
out << factorial(p) << std::endl;
return 0;
}