Cod sursa(job #2283807)

Utilizator bpetru05Mitoiu Bogdan Petru bpetru05 Data 15 noiembrie 2018 21:42:36
Problema Factorial Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <climits>
#define ULL unsigned long long
using namespace std;
ULL p, i, nrz, in, sf, mj, mini;
ifstream f("fact.in");
ofstream g("fact.out");
ULL calcnrzero(ULL i)
{
	ULL r = 0;
	ULL pt = 5;
	while (i / pt != 0)
	{
		r += i / pt;
		pt *= 5;
	}
	return r; 
}
int main()
{
	f >> p;
	mini = ULLONG_MAX;
	i = 1;
	sf = 400000015;
	in = 1;
	nrz = calcnrzero((sf+in) / 2);
	mj = (sf + in) / 2;
	if (p == 0)
		mini = 1;
	else
	{
		while (nrz >= p && in <= sf)
		{
			if (nrz > p)
			{
				sf = mj - 1;
				mj = (sf + in) / 2;
				nrz = calcnrzero(mj);
				continue;
			}
			if (nrz < p)
			{
				in = mj + 1;
				mj = (sf + in) / 2;
				nrz = calcnrzero(mj);
				continue;
			}
			if (nrz == p)
			{
				ULL j;
				j = mj;
				while (calcnrzero(j) == p)
				{
					mini = j;
					j--;
				}
				break;
			}
		}
	}
	if (in > sf)
		i = -1;
	else
		i = mini;
	g << i<<"\n";
	f.close();
	g.close();
	return 0;
}