Ich versuche, nachgestellte Nullen von Zahlen zu zählen, die von faktorials resultieren (was bedeutet, dass die Zahlen ziemlich groß werden). Der folgende Code nimmt eine Zahl an, berechnet die Fakultät der Zahl und zählt die abschließenden Nullen. Wenn die Zahl jedoch ungefähr so groß wie 25 ist, funktionieren NumZeros nicht.Das Zählen von nachgestellten Nullen von Zahlen resultierte aus Fakultät
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;
}
Ich bin keine Sorgen über die Effizienz dieses Codes, und ich weiß, dass es mehr Möglichkeiten, besser ist die Effizienz dieses Codes zu machen. Was ich herausfinden will, ist der Grund, warum die nachgestellten Nullen von Zahlen, die größer als 25 sind, gezählt werden! funktioniert nicht.
Irgendwelche Ideen?
meine Vermutung ist, dass Sie die Größe eines Doppel werden übertroffen. – jjnguy
@jjnguy: Ja, das war meine erste Schätzung, aber dann 25! ist weniger als Javas Max-Double. – codingbear
Übrigens wird numZeros -1 für 1 !, 2 !, 3! Und 4! –