2014-11-05 166 views
2

我已經寫了一個輸出斐波那契數列的程序,並且該程序對於小數字來說工作正常。當我設置序列的第10 000個循環時,程序變得非常奇怪,並開始輸出負數和正數。[Java]斐波那契數列越大,斐波那契數列的輸出越多

起初我雖然是因爲我用int類型的數字,但後來我改變它很長,程序仍輸出相同的東西。我對java很陌生,所以我猜想我的程序有些問題,或者我錯過了一個比long更長的類型,並且不會輸出負數。

下面是代碼。隨意對任何事情從剛剛任何錯誤否則除了發表評論,因爲我是相當新的Java這樣的代碼可能看起來有點外行:

public class Problem2{ //fibonacci sequence 
    public static void main (String [] args){ 
     long first = 1; 
     long second = 1; 
     System.out.println(first); 
     System.out.println(second); 

     for (int i = 1; i <= 100 ; i++){ 

     long third = first + second;    
     first = second; 
     second = third; 
     System.out.println(third);   
     } 
    } 
} 

輸出的第90號是好的:1 1 2 3 5 8月13日21: 在此之後,最後2個輸出:

90:7540113804746346429

91:-6246583658587674878

我真誠地道歉,如果這已經被問了很多次,我已經搜查在周圍我很難理解,所以我覺得最好問一下。

回答

0

,因爲它需要保持它被要求持有

你可以聲明和初始化它......對於如 BigInteger的BI 1 =新的BigInteger數據的所有位(」 BigInteger類分配的內存12345678900123" );

更改程序作爲

BigInteger first, second, third ; 


first= new BigInteger("123"); 
    second= new BigInteger("50"); 

for (int i = 1; i <= 100 ; i++){ 

     third = first.add(second);   
     first = second; 
     second = third; 
+0

可能我只問,我需要把一個值到新()之間的BigInteger()還是隻是連續擴展,直到它足夠大以容納所有數字? – Fruloops 2014-11-05 16:44:36

+0

你將需要初始化它,但稍後它會隨着內存的增長而調整...... – kirti 2014-11-05 17:10:38

+0

我可以問我如何在我的代碼中使用BigInteger類?對不起,這麼多的問題:( – Fruloops 2014-11-05 18:38:00

4

這被稱爲溢出。您應該使用Java提供的BigInteger類。斐波納契序列增長得非常快,所以它的元素很快就不適合int以及long。所以你會溢出,你開始看到負數。

+0

我想BigInteger的覆蓋像長相同的值不會OO媽的,我覺得這樣愚蠢-.- – Fruloops 2014-11-05 16:41:06