Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我得到s=-1807786450?_C - Fatal编程技术网

C 为什么我得到s=-1807786450?

C 为什么我得到s=-1807786450?,c,C,斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是: 1、2、3、5、8、13、21、34、55、89 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和 #包括 #包括 内部主(空) { int a=0,b=1,c,s=0; int i=1,f=0; 虽然(i因为你没有初始化a和b,所以它们包含垃圾。例如,如果你使a=0和b=0,你的s值将变为0。你的循环条件很糟糕,一方面-你在循环,而i小于100000。问题是你可以在有符号的中表示的最大斐波

斐波那契序列中的每个新项都是通过将前两项相加生成的。从1和2开始,前10个术语将是:

1、2、3、5、8、13、21、34、55、89

通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和

#包括
#包括
内部主(空)
{
int a=0,b=1,c,s=0;
int i=1,f=0;

虽然(i因为你没有初始化a和b,所以它们包含垃圾。例如,如果你使a=0和b=0,你的s值将变为0。

你的循环条件很糟糕,一方面-你在循环,而
i
小于
100000
。问题是你可以在有符号的中表示的最大斐波那契项de>int
F(46)
,或
1836311903
1-一旦计算
F(47)
c
中的值溢出,由此计算出的任何内容都是垃圾

由于要求将斐波那契值之和增加到400万,因此您的条件需要

while ( c <= 4000000 )
{
  ...
}

while(c代码中有两个问题导致了奇怪的错误

最有问题的错误是
int
数字太小,无法包含所有和。常量
int\u MAX
将32位机器的最大值报告为
2147483647
。相比之下,计算出的第100000个斐波那契数…很大

这就引出了第二个问题,正如前面提到的:你不是把所有小于400万的斐波纳契数相加,而是把前100000个斐波纳契数相加

替换
循环中的条件,同时执行以下操作:

while (c <= 4000000)
{
    // ...
}

while(另外,第10万个斐波那契数超过400万。我试过双无符号长码,但没有work@MooingDuck
int
通常是32位,因此它可以容纳超过20亿的数字。你不需要这么大的数字。当
c>4000000
时,你应该停止。这里是一个c类型的限制列表:如果你从这两个0开始,它只会产生一个0的无限序列。未初始化的值和未定义的行为再次发生!@Barmar我刚刚给出了一个例子。这并不否定您始终需要跟踪变量的事实:)当然。但是仅仅初始化变量是不够的,你必须将它们初始化为算法的正确值。这不是问题的答案。虽然他没有初始化问题中的变量,但a=0,b=1会导致他得到的确切错误。