我是编程的新手,需要C语言方面的帮助。我正在编写一个程序,以生成最多1000位数字的斐波那契数列。

这是我的代码:

#include <stdio.h>

int main(void)
{
    int seq[1000];
    int i,n;

    printf("How many Fibonacci numbers do you want?: ");
    scanf("%d",&n);

    seq[0] = 0;
    seq[1] = 1;

    for(i = 2; i < n; i++)
        seq[i] = seq[i-1] + seq[i-2];

    for (i = 1; i < n; i++)
        printf("%d: %d\n", i, seq[i]);

    return 0;
}


现在的问题是,直到第47个数字,所有数字都是正确的。然后它变得疯狂,并且有负数,这全都错了。谁能在我的代码中看到错误?任何帮助是极大的赞赏。

最佳答案

我正在编写一个程序,以生成多达1000位数字的斐波那契数列。


还不是。您正在将值存储在int类型的变量中。通常,此类变量为32位值,并且最大可能值为2^31 - 1。等于2,147,483,647,与您达到1,000位数字的目标有些距离。

第47个斐波纳契数是第一个超过2,147,483,647的数字。根据Wolfram Alpha,该值为2,971,215,073

当您的程序尝试计算这样的数字时,它会遇到整数溢出的问题,因为不能将真实值存储在int中。您可以尝试准确分析溢出时发生的情况,为什么看到负值,但这并不能使您走得太远。简而言之,使用int显然是不可能的。

为了达到1,000位数字,您需要使用大整数类型。内置类型都无法处理您想要处理的数字。

09-03 18:24