Cod sursa(job #1329084)

Utilizator codrut_grosuGrosu Codrut-Cristian codrut_grosu Data 29 ianuarie 2015 00:23:09
Problema Factorial Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
# include <iostream>
# include <fstream>

/*
	Numarul de zerouri dintr-un factorial este dat de numarul de cinci
	din produsul care alcatuiesc factorialul. Numerele care au cinci printre
	multiplii sunt 5,10,15,20,25,30 ... si daca impart aceste numere la 5, obtin
	1,2,3,4,5,6, ... si astfel numerele care sunt divizibile cu 5 le contorizez
	odata, cele care sunt divizibile cu 25, le contorizez de doua orice, cele
	divizibile cu 125 le contorizez de 3 ori si tot asa. Algoritmul se termina
	cand numarul de cinci este egal cu P-ul si atunci afisez numarul curent 
	inmultit cu 5 sau cand numarul de cinci este mai mare ca P-ul si atunci se
	termina programul cu -1 pentru ca orice factorial nu poate avea exact P 
	zerouri daca numarul de cifre de cinci este mai mare ca P.
*/

int main () {

	std :: ifstream f ("fact.in");
	std :: ofstream g ("fact.out");

	int P;
	int nr = 0;
	int i;
	int a;

	f >> P;	

	if ( P == 0 ) {
		g << 1;
	} else if ( ( P + 1 ) % 6 == 0 ) {
		g << -1;
	} else {
		a = 1;

		while (true) {
			i = a ;

			while ( i % 5 == 0 ) {
				i /=5;
				nr ++;
			}

			nr ++;

			if ( nr == P ) {
				g << a*5;
				break;
			} else if ( nr > P ) {
				g << -1 ;
				break;
			}
			a ++;
		}
	}

	g << '\n';

	return 0;
}