我是编程的新手,需要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位数字,您需要使用大整数类型。内置类型都无法处理您想要处理的数字。