Java ist der Bereich von int?
Ich verstehe, dass int Bereich, in Java sollte -2^31 bis 2^31-1.
Aber wenn ich dieses code-snippet mit 20:
public class Factorial {
public int factorial(int n) {
int fac=1;
for (int i=1; i<=n; i++) {
fac *= i;
System.out.println("Factorial of " + i + " is: " + fac);
}
return fac;
}
}
Die Ausgabe:
Factorial of 1 is: 1
Factorial of 2 is: 2
Factorial of 3 is: 6
Factorial of 4 is: 24
Factorial of 5 is: 120
Factorial of 6 is: 720
Factorial of 7 is: 5040
Factorial of 8 is: 40320
Factorial of 9 is: 362880
Factorial of 10 is: 3628800
Factorial of 11 is: 39916800
Factorial of 12 is: 479001600
Factorial of 13 is: 1932053504
Factorial of 14 is: 1278945280
Factorial of 15 is: 2004310016
Factorial of 16 is: 2004189184
Factorial of 17 is: -288522240
Factorial of 18 is: -898433024
Factorial of 19 is: 109641728
Factorial of 20 is: -2102132736
Es ist nicht Sinn machen, die vom 13. Sieht aus wie es ist aus der Palette umwickelt herum. Was ist falsch? Ist es wegen der Sonnenfinsternis, die ich verwende?
Obwohl ich denke, es ist nicht relevant, hier ist der test-code:
public class TestFac {
public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);
System.out.println("Input num you want to factorial: ");
n = sc.nextInt();
Factorial fac = new Factorial();
fac.factorial(n);
}
}
- verwenden Sie lange - Datentyp statt int.
- Sie sollten zunächst prüfen, den tatsächlichen Wert der Fakultät 13 und sehen, ob es passt, innerhalb von 0 und 2^31 -1. Können nicht die Schuld Eclipse oder Java für den Fehler. Wie die Antworten gepostet werden, gehen für lange oder sogar besser BigInteger.
- Gut, 2^31-1 ist 2 147 483 647 und 13! 6 227 020 800, was größer ist.
- bigInteger docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier erwähnen möchte ich das Konzept der ganzzahligen Uhr.
Max-und min-Werte für int in java sind
int MAX_VALUE = 2147483647
int MIN_VALUE = -2147483648
überprüfen Sie bitte die folgenden Ergebnisse
Ausgabe:
Es zeigt, dass, wenn Sie gehen über die Grenze der +ve Bereich der ganzen zahlen, die nächsten Werte beginnt seine negativen Anfangswert wieder.
Wenn Sie berechnen die Fakultät von 13 6227020800.
Dieser Wert geht über int Palette von java.
Also der neue Wert wird
So, in Ihrer Antwort Fakultät der 13 kommt 1932053504.
Dies ist, wie integer Uhr arbeitet.
Können Sie mithilfe der Datentyp long statt integer zu erreichen Ihren Zweck.
Für Fragen können Sie hier posten.
Vom http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html:
Moral von der Geschichte: Nie glauben, in Ihrem Lehrer blind!
Wenn Sie das Kontrollkästchen Java-Ganzzahl, die die maximale und minimale Werte sind wie folgt:
Wenn Sie tun, einige in der Mathematik, Sie werden sehen, dass (Fakultät 13)
1932053504 * 14
ist27048749056
was jenseits int MAX_VALUE und das ist, warum Sie werden immer falsche Ergebnis für die Fakultät vom 14. Also, um gute Ergebnisse es ist besser, verwenden Sielong
Art statt.Fakultät 13 6227020800. Dies ist mehr als 31 bits lang, so dass es gewickelt.
Wenn Sie möchten, zur Unterstützung von GROßEN zahlen (z.B. beliebiger Länge), dann erwägen Sie die Verwendung der BigInteger - Klasse, die eine unbegrenzte Auswahl.
Bitte diesen code ausführen:
So können Sie sehen, warum es scheitert.