Estoy tratando de contar los ceros finales de los números que son resultado de los factoriales (lo que significa que los números son bastante grandes). El código siguiente toma un número, calcule el factorial del número y cuente los ceros finales. Sin embargo, cuando el número es aproximadamente tan grande como 25 !, los numZeros no funcionan.Contando los ceros finales de los números resultantes del factorial
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double fact;
int answer;
try {
int number = Integer.parseInt(br.readLine());
fact = factorial(number);
answer = numZeros(fact);
}
catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static double factorial (int num) {
double total = 1;
for (int i = 1; i <= num; i++) {
total *= i;
}
return total;
}
public static int numZeros (double num) {
int count = 0;
int last = 0;
while (last == 0) {
last = (int) (num % 10);
num = num/10;
count++;
}
return count-1;
}
No me preocupa la eficiencia de este código, y sé que hay varias maneras de hacer que la eficiencia de este código MEJOR. Lo que estoy tratando de averiguar es por qué el conteo de ceros finales de números que son mayores que 25! no está trabajando.
¿Alguna idea?
mi conjetura es porque se está superando el tamaño de un doble. – jjnguy
@jjnguy: Sí, esa fue mi primera suposición, ¡pero luego 25! es menor que el doble máximo de Java. – codingbear
Por cierto, numZeros devolverá -1 para 1! 2! 3! Y 4 !. –