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去算就好,目前来看都可以满足,原则上是,只要你的计算机的内存足够大,可 以有无限位的
添加回答
举报
0/150
提交
取消