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);輸出結(jié)果:1005876315485501977經(jīng)過分析,這個(gè)答案是錯(cuò)誤的,1!+2!+3!+4!+.....+100!的結(jié)果的個(gè)位數(shù)肯定是3的,上面的代碼的邏輯的問題都沒有問題,驗(yàn)算過。錯(cuò)誤的地方是item變量,我把它設(shè)置為long類型,就出現(xiàn)了1005876315485501977這個(gè)結(jié)果,為什么不可設(shè)置成long類型?求解我把item變量設(shè)置成int類型,結(jié)果溢出,100階乘的和超過long的內(nèi)存空間,采用BigInteger類去操作,輸出結(jié)果正確。不懂的就是為什么item變量類型不可以設(shè)置成long類型。朋友,解答一下。thx
1 回答
已采納

大咪
TA貢獻(xiàn)785條經(jīng)驗(yàn) 獲得超332個(gè)贊
因?yàn)閘ong類型最多只支持2^63-1...可惜你這個(gè)階乘中途就已經(jīng)溢出了,必然會報(bào)錯(cuò),我剛才上網(wǎng)查了一下數(shù)據(jù)。階乘到13就已經(jīng)溢出了。 13!=1932053504(錯(cuò)誤)應(yīng)該是?6227020800 所以,一般來說計(jì)算大數(shù)據(jù)直接用BigInteger去算就好,目前來看都可以滿足,原則上是,只要你的計(jì)算機(jī)的內(nèi)存足夠大,可 以有無限位的
添加回答
舉報(bào)
0/150
提交
取消