Pagini recente » Cod sursa (job #3183196) | Cod sursa (job #1974650) | Cod sursa (job #2590790) | Cod sursa (job #631168) | Cod sursa (job #1454384)
#include <fstream>
int trailingZeroes(int n)
{
int powOfFive = 5;
int zeroCount = 0;
while (powOfFive <= n)
{
zeroCount += n / powOfFive;
powOfFive *= 5;
}
return zeroCount;
}
int lowestOkNumber(int reqZeroes)
{
int lowerBound = 0;
int upperBound = reqZeroes;
int res = -1;
while (lowerBound <= upperBound)
{
int mid = ((long long)upperBound + lowerBound) / 2;
int trailingZ = trailingZeroes(mid);
if (trailingZ == reqZeroes)
{
res = mid;
upperBound = mid - 1;
}
else if (trailingZ < reqZeroes)
{
lowerBound = mid + 1;
}
else
{
upperBound = mid - 1;
}
}
return res;
}
int main()
{
std::ifstream in("fact.in");
int num = 0;
in >> num;
in.close();
std::ofstream out("fact.out");
out << num == 0 ? 1 : lowestOkNumber(num);
out.close();
}