Cod sursa(job #1454386)

Utilizator PatrunjeluMarginean Bogdan Alexandru Patrunjelu Data 26 iunie 2015 13:19:03
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#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 * 10;
	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");
	int res = num == 0 ? 1 : lowestOkNumber(num);
	out << res;
    out.close();
}