为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星淼淼 2021-05-14 17:23:32
这是我的析因程序代码。它工作正常,但是我不明白为什么为什么没有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);}
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

作为乘积一部分的每个偶数对阶乘贡献尾随零。实际上,更精确地说,(无限精度)乘积的尾随零计数是输入的尾随零计数的总和。以有限的精度,尾随零的数量显然受数字大小的限制。

因此,最终,这很快发生,尾随零的数量变得大于或等于32,在这种情况下,an的所有int将为零。当然long,稍后会发生同样的事情,在64个尾随零。在此之前的某个时间,即使结果还不完全为零,它也将已经停止匹配结果,而该结果本来可以无限精度地匹配。

例如34!十六进制是

de1bc4d19efcac82445da75b00000000

如果使用32位整数进行计算,将得到的最低8位数字,而所有这些数字均为零。


查看完整回答
反对 回复 2021-05-26
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

如此大的阶乘将非常大。您必须使用可以存储大量数据的数据类型(我们所说的是数十亿和数万亿)。BigInteger数据类型可能有效。试一试。


查看完整回答
反对 回复 2021-05-26
  • 3 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信