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
提交
取消