Pagini recente » Cod sursa (job #2667791) | Cod sursa (job #1778009) | Cod sursa (job #2316814) | Cod sursa (job #2350846) | Cod sursa (job #1329039)
# include <iostream>
# include <fstream>
int main () {
std :: ifstream f ("factorial.in");
std :: ofstream g ("factorial.out");
int P;
int nr = 0;
int i;
int a;
f >> P;
if ( P == 0 ) {
g << 1;
} else {
a = 1;
/*
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.
*/
while (true) {
i = a;
if ( i % 5 == 0 ) {
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;
}