2015-10-16 130 views
0

我想打印Fibonacci序列中的前100個數字。我的程序打印直到20個左右的數字比數字變成負數。斐波那契序列溢出,C++

有人可以向我解釋這一點,並提供修復?

感謝,

/*Fibonacci sequence*/ 

#include <iostream> 

using namespace std; 

int main(){ 
    long int i, fib; 
    int firstNum=0, secondNum=1; 

    cout << firstNum << endl; 
    cout << secondNum << endl; 

    for (i=0; i < 100; i++){ 
     fib = firstNum + secondNum; 
     firstNum = secondNum; 
     secondNum = fib; 
     cout << fib << endl; 
    } 

    return 0; 
} 
+2

最大值的'int'可以存儲爲+2147483647。嘗試使用'unsigned long long',即使那麼我認爲在達到100之前你可能會溢出。 –

+1

在第20次fabonacci num之後,它跨越了int的範圍,那麼你可以使用long long int,但是它也會存儲到91 fabonacci。所以你可以將它們存儲在數組中,或者使用Bigint。 – wrangler

+0

@JonathanPotter \t int可以存儲的最大值*至少是* +2147483647。 'int'可能大於32位。 –

回答

1

你們看到的是一個整數溢出問題。 firstNum和secondNum不長。

這應該修復它

unsigned long long i, fib; 
    unsigned long long firstNum=0, secondNum=1; 

編輯:

這將幫助你避免在20號之後溢出,但程序還是會溢出。您可以使用無符號long long,並且您將使其成爲第100個序列元素。

+1

「長」中有多少位? –

+0

在大多數32位機器上,'sizeof(long)== 4'。 – Downvoter

+2

它仍然超出範圍,並且對於64位也很長。 – wrangler

0
  • 我們可以將這些值存儲在動態創建的結構中,例如 作爲鏈接列表(如果我們要存儲所有斐波納契數字)
  • 我們可以使用三個字符串數組來保存總和和臨時值來打印它,這將解決您的問題。

請參見本參考

Print nth Fibonacci number [upto 1000 digits]