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

// 计算1!+2!+3!+4!+.....+100!

// 计算1!+2!+3!+4!+.....+100!

Chengl 2016-10-19 20:20:31
long sum = 0;         for (int i = 1; i <=100; i++) {             long item=1;             for(int j=1;j<=i;j++){                 item=item*j;             }             sum=sum+item;         }         System.out.println(sum);输出结果:1005876315485501977经过分析,这个答案是错误的,1!+2!+3!+4!+.....+100!的结果的个位数肯定是3的,上面的代码的逻辑的问题都没有问题,验算过。错误的地方是item变量,我把它设置为long类型,就出现了1005876315485501977这个结果,为什么不可设置成long类型?求解我把item变量设置成int类型,结果溢出,100阶乘的和超过long的内存空间,采用BigInteger类去操作,输出结果正确。不懂的就是为什么item变量类型不可以设置成long类型。朋友,解答一下。thx
查看完整描述

1 回答

已采纳
?
大咪

TA贡献785条经验 获得超332个赞

因为long类型最多只支持2^63-1...可惜你这个阶乘中途就已经溢出了,必然会报错,我刚才上网查了一下数据。阶乘到13就已经溢出了。

13!=1932053504(错误)应该是 6227020800

所以,一般来说计算大数据直接用BigInteger去算就好,目前来看都可以满足,原则上是,只要你的计算机的内存足够大,可
以有无限位的


查看完整回答
1 反对 回复 2016-10-19
  • 大咪
    大咪
    嗯呐……求采纳嘎嘎嘎赚积分
  • 1 回答
  • 1 关注
  • 2418 浏览

添加回答

举报

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