Sto cercando di contare gli zeri finali di numeri risultanti da fattoriali (il che significa che i numeri diventano piuttosto grandi). Il codice seguente prende un numero, calcola il fattoriale del numero e conta gli zeri finali. Tuttavia, quando il numero è pari a 25 !, numZeros non funziona.Il conteggio degli zeri finali dei numeri è il risultato fattuale
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;
}
Non sto preoccupando l'efficienza di questo codice, e so che ci sono diversi modi per rendere l'efficienza di questo codice migliore. Quello che sto cercando di capire è perché il conteggio degli zeri finali di numeri superiori a 25! non funziona.
Qualche idea?
la mia ipotesi è perché si sta superando la dimensione di un doppio. – jjnguy
@jjnguy: Sì, quella era la mia prima ipotesi, ma poi 25! è inferiore al doppio massimo di Java. – codingbear
A proposito, numZeros restituirà -1 per 1 !, 2 !, 3! E 4 !. –