正如其他人所提到的,你已經溢出了大小int
。更改爲long
最多可以處理20個,但它會在任何更高的值處溢出,此時您需要BigInteger
。
但是,你有比這個更大的問題。
你的主要問題是你的算法不好。
你應該是這樣計算:
1 + 2 ! + 3 ! + 4 ! + 5 ! + ...
1 + 1*2 + 1*2*3 + 1*2*3*4 + 1*2*3*4*5 + ...
1 + 2 + 6 + 24 + 120 + ...
所以讓我們添加一些打印語句,看看你在做什麼真正做。請參閱下面的更新代碼和輸出。
1 + 1+2 + 2+4+12 + 12+24+72+288 + 288+576+1728+6912+34560 + ...
哇!這甚至沒有接近同一件事。
我會讓你找出你出錯的地方。
這些打印語句將有助於此。
1)提示:刪除i
循環。
代碼
int sum = 0;
int a = 1;
System.out.printf(" a=%-11d sum=%d%n", a, sum);
for (int j = 1; j < 21; j++) {
for(int i=1;i<j+1;i++) {
a = a * i;
sum += a;
System.out.printf("j=%-2d i=%-2d a=%-11d sum=%d%n", j, i, a, sum);
}
}
System.out.println("sum=" + sum);
輸出
a=1 sum=0
j=1 i=1 a=1 sum=1
j=2 i=1 a=1 sum=2
j=2 i=2 a=2 sum=4
j=3 i=1 a=2 sum=6
j=3 i=2 a=4 sum=10
j=3 i=3 a=12 sum=22
j=4 i=1 a=12 sum=34
j=4 i=2 a=24 sum=58
j=4 i=3 a=72 sum=130
j=4 i=4 a=288 sum=418
j=5 i=1 a=288 sum=706
j=5 i=2 a=576 sum=1282
j=5 i=3 a=1728 sum=3010
j=5 i=4 a=6912 sum=9922
j=5 i=5 a=34560 sum=44482
j=6 i=1 a=34560 sum=79042
j=6 i=2 a=69120 sum=148162
j=6 i=3 a=207360 sum=355522
j=6 i=4 a=829440 sum=1184962
j=6 i=5 a=4147200 sum=5332162
j=6 i=6 a=24883200 sum=30215362
j=7 i=1 a=24883200 sum=55098562
j=7 i=2 a=49766400 sum=104864962
j=7 i=3 a=149299200 sum=254164162
j=7 i=4 a=597196800 sum=851360962
j=7 i=5 a=-1308983296 sum=-457622334
j=7 i=6 a=736034816 sum=278412482
j=7 i=7 a=857276416 sum=1135688898
在這裏你還可以看到你的溢出問題發生(第一時間)j=7, i=5
。
嘗試使用'long'或'BigInteger' – TheLostMind
有一個在你的代碼另一個錯誤,'了'應該最外層循環內初始化。 –