Tôi đang cố gắng đếm số không theo số được tạo thành từ giai thừa (có nghĩa là các con số nhận được khá lớn). Mã sau có một số, tính giai thừa của số và đếm số không theo sau. Tuy nhiên, khi số lượng lớn khoảng 25 !, numZeros không hoạt động.Đếm số không theo sau của các số kết quả từ giai thừa
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;
}
Tôi không lo lắng về hiệu quả của mã này và tôi biết rằng có nhiều cách để làm cho hiệu quả của mã này TỐT HƠN. Những gì tôi đang cố gắng tìm ra là lý do tại sao đếm số 0 của các con số lớn hơn 25! không hoạt động.
Bất kỳ ý tưởng nào?
tôi đoán là bởi vì bạn đang vượt qua kích thước của một đôi. – jjnguy
@jjnguy: Vâng, đó là phỏng đoán đầu tiên của tôi, nhưng sau đó là 25! nhỏ hơn gấp đôi tối đa của Java. – codingbear
Nhân tiện, numZeros sẽ trả về -1 cho 1 !, 2 !, 3 !, và 4 !. –