परिणामस्वरूप मैं संख्याओं के पीछे शून्यों को गिनने की कोशिश कर रहा हूं जो तथ्यों से उत्पन्न होते हैं (जिसका अर्थ है कि संख्याएं काफी बड़ी हैं)। निम्नलिखित कोड संख्या लेता है, संख्या के फैक्टोरियल की गणना करता है, और पिछली शून्यों की गणना करता है। हालांकि, जब संख्या 25 जितनी बड़ी है !, numZeros काम नहीं करते हैं।संख्याओं के पीछे के शून्यों की गणना करने के परिणामस्वरूप फैक्टोरियल
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! जावा के अधिकतम डबल से कम है। – codingbear
वैसे, numZeros 1 के लिए -1 वापस आ जाएगा !, 2 !, 3 !, और 4! –