找到编号的阶乘。它工作正常,但我不明白为什么为什么没有56,89,77和其他一些数字就给我阶乘0

这是我的析因程序代码。它工作正常,但是我不明白为什么为什么没有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);

}


繁星淼淼
浏览 186回答 3
3回答

侃侃无极

作为乘积一部分的每个偶数对阶乘贡献尾随零。实际上,更精确地说,(无限精度)乘积的尾随零计数是输入的尾随零计数的总和。以有限的精度,尾随零的数量显然受数字大小的限制。因此,最终,这很快发生,尾随零的数量变得大于或等于32,在这种情况下,an的所有位int将为零。当然long,稍后会发生同样的事情,在64个尾随零。在此之前的某个时间,即使结果还不完全为零,它也将已经停止匹配结果,而该结果本来可以无限精度地匹配。例如34!十六进制是de1bc4d19efcac82445da75b00000000如果使用32位整数进行计算,将得到的最低8位数字,而所有这些数字均为零。

泛舟湖上清波郎朗

如此大的阶乘将非常大。您必须使用可以存储大量数据的数据类型(我们所说的是数十亿和数万亿)。BigInteger数据类型可能有效。试一试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java