これは、階乗プログラムの私のコードです。それは正常に機能していますが、なぜ56,89,77やその他のいくつかの数値に対して階乗0を与えているのか理解できません。
private static void factorial() {
int resultant = 1, i;
System.out.println("Please Enter any number to find factorial : ");
Scanner scan = new Scanner(System.in);
int fact = scan.nextInt();
for (i = 1; i <= fact; i++) {
resultant = resultant * i;
}
System.out.println("Factorial of number : " + resultant);
}
製品の一部であるすべての偶数は、階乗に後続ゼロを与えます。実際には、より正確に言えば、(無制限の精度)積の後続ゼロカウントは、入力の後続ゼロカウントの合計です。有限精度では、後続ゼロの数は明らかに数のサイズによって制限されます。
したがって、最終的には、これがかなり迅速に発生し、後続ゼロの数が32以上になり、その場合、のすべてのビットint
がゼロになります。もちろん、同じことがlong
64の後続ゼロで少し発生します。その少し前に、結果が完全にゼロになっていなくても、結果が無限の精度であったであろうものとのマッチングがすでに停止していたでしょう。
例えば34!16進数で
de1bc4d19efcac82445da75b00000000
最下位8桁は、32ビット整数で計算した場合に得られるものであり、それらの桁はすべてゼロです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加