Cod sursa(job #726688)

Utilizator NikitaUtiuNichita Utiu NikitaUtiu Data 27 martie 2012 13:46:18
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
using namespace std;

int nrZeros(int);
int solve(int);

int main(void) {
	ifstream fin("fact.in"); int nr;
	fin >> nr;
	fin.close();
	
	ofstream fout("fact.out");
	fout << solve(nr);
	fout.close();
}

int solve(int zeros) {
	int step, pos;
	for(step = 1; step < 1000000000; step <<= 1) {}
	for(pos = 0; step != 0; step >>= 1)
		if(pos + step < 1000000000 && nrZeros(pos + step) < zeros)
			pos += step;
	if(nrZeros(pos + 1) == zeros)
		return pos + 1;
	return -1;
}

int nrZeros(int x) {
	int zeros = 0;
	for(int pow = 5; pow <= x; pow *= 5)
		zeros += x / pow;
	return zeros;
}

// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
//         +          +              +              +              +
//                                                                 +