Я пытаюсь подсчитать конечные нули чисел, которые получены из факториалов (что означает, что числа становятся довольно большими). Следующий код принимает число, вычисляет факториал числа и подсчитывает конечные нули. Однако, когда число составляет около 25!, NumZeros не работают.Подсчет числа нулей чисел, полученных от 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;
}
Я не беспокоиться об эффективности этого кода, и я знаю, что есть несколько способов, чтобы сделать эффективность этого кода ЛУЧШЕ. То, что я пытаюсь понять, - это то, что подсчет завершающих нулей чисел больше 25! не работает.
Любые идеи?
мое предположение, потому что вы превосходящий размер в два раза. – jjnguy
@jjnguy: Да, это было мое первое предположение, но потом 25! меньше, чем Java max double. – codingbear
Кстати, numZeros вернет -1 для 1 !, 2 !, 3 !, и 4 !. –