斐波那契数列溢出,C++

fibonacci sequence overflow, C++

我想打印斐波那契数列中的前 100 个数字。我的程序打印到大约 20 个数字,然后数字变成负数。

有人可以向我解释一下并提供解决方案吗?

谢谢,

/*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;
}

您看到的是整数溢出问题。 firstNum 和 secondNum 都不长。

这应该可以解决问题

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

编辑:

这将帮助您避免在第 20 个数字后溢出,但您的程序仍然会溢出。您可以使用 unsigned long long,您将到达第 100 个序列元素。

好吧,即使 unsigned long long int 超出了更高 fabonacci num(92 以上)的范围,但如果仍然感兴趣,你可以将它们逐位存储在数组中

看到这个 https://docs.google.com/file/d/0BwtP9e5j1RbpSjhvSG4wbkhGcmM/edit

  • 或者我们可以将值存储在动态创建的结构中,例如 作为链表(如果我们想存储所有斐波那契数)OR
  • 我们可以只使用三个字符串数组来保存 sum 和 temp 值来打印它,这将解决您的问题。

请看这个参考

Print nth Fibonacci number [upto 1000 digits]