【发布时间】:2014-03-02 15:23:36
【问题描述】:
我是编程新手,需要 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 个数字为止,这些数字都是正确的。然后它就变得疯狂了,出现了负数,一切都错了。谁能看到我的代码中的错误?非常感谢任何帮助。
【问题讨论】:
-
你听说过整数溢出吗? :) 谷歌搜索会有所帮助。
-
在答案中添加信息:
int和long int的大小因系统而异。 C 标准仅要求int至少为 16 位,long至少为 32。通常int为 32 位,long为 32 或 64。@987654329 @ 必须至少为 64 位,并且通常正好是 64 位。有符号整数溢出的行为是undefined。通常的 2 的补码环绕是典型的,但即使对于使用 2 的补码表示的系统也不能保证 - 优化编译器可以做令人惊讶的事情。