
Ultimo dígito del factorial de un número
Publicado por Chris (7 intervenciones) el 27/09/2021 22:15:24
Buenas a todos, hice el ejercicio de un juez online de calcular el último digito del factorial de un número dado. La primera solución que propuse fué aceptada, para números mayores a 4 devolvía cero, para menores, calculaba el factorial con un bucle y luego devolvía el resto, con módulo 10 sobre el valor.
Se me ocurrió qué, para el último dígito de un factorial sólo hay 5 posibles valores:
1! = 1, último díg 1
2! = 2, último díg 2
3! = 6, último díg 6
4! = 24, último díg 4
si n > 4, último dígito factorial = 0
entonces podía resolverlo con un switch o con if...else para estos 5 casos, quizás así fuese más rápido y obtendría mejor puntuación, pero esta solución fué descartada, y no lo logro entender por qué. He hecho pruebas con ambas soluciones y diferentes entradas y en ambas devuelve lo mismo. No logro ver que está mal o por qué rechaza la solución el juez, está claro que algo no he tenido en cuenta pero no sé dónde más mirar. Dejo aquí el código.
P.D: las entradas siempre son valores positivos.
Gracias, un saludo.
Se me ocurrió qué, para el último dígito de un factorial sólo hay 5 posibles valores:
1! = 1, último díg 1
2! = 2, último díg 2
3! = 6, último díg 6
4! = 24, último díg 4
si n > 4, último dígito factorial = 0
entonces podía resolverlo con un switch o con if...else para estos 5 casos, quizás así fuese más rápido y obtendría mejor puntuación, pero esta solución fué descartada, y no lo logro entender por qué. He hecho pruebas con ambas soluciones y diferentes entradas y en ambas devuelve lo mismo. No logro ver que está mal o por qué rechaza la solución el juez, está claro que algo no he tenido en cuenta pero no sé dónde más mirar. Dejo aquí el código.
P.D: las entradas siempre son valores positivos.
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
26
27
28
#include <iostream>
#include <fstream>
using namespace std;
void resuelveCaso() {
int num;
cin >> num;
if(num == 1 || num == 2 || num == 4){
cout << num << endl;
}
else if(num == 3){
cout << 6 << endl;
}
else{
cout << 0 << endl;
}
}
int main() {
unsigned int numCasos;
std::cin >> numCasos;
for (int i = 0; i < numCasos; ++i) {
resuelveCaso();
}
return 0;
}
Gracias, un saludo.
Valora esta pregunta


0