////Even Fibonacci numbers
int i=2;
int sum_of_Even=0;
int fib_array[]={};
fib_array[0]=1;
fib_array[1]=1;
while (fib_array[i]<4000000)
{
fib_array[i]=fib_array[i-1]+fib_array[i-2];
if ((fib_array[i]%2) == 0)
{
sum_of_Even+=fib_array[i];
}
i++;
}
printf("sum of Even terms in the fib sequence = %i\n", sum_of_Even);
在终端上,输出为3 ..帮助! 程序看起来很好......但不知何故给出了3的输出(这是非常错的).. 打开如何解决这个问题的建议.. 谢谢..
答案 0 :(得分:5)
问题可能在这里:(无论如何,即使它不是 问题,这也是一个大问题。)
int fib_array[]={};
在内存中为您的阵列分配的空间不会像您预期的那样动态增长。你需要以某种方式为它管理内存。现在你正在大量涌入这个阵列,这个程序不会崩溃或断块,真是令人惊讶。
编辑此外,每次您的while
循环检查其是否再次运行的条件时,它会访问您阵列中尚未进行的条目初始化!注意:
fib_array[2] < 4000000
!fib_array[3] < 4000000
!编辑2:由于(非常多)人发布了你需要使用64位整数并且这是你问题的根源,我想发表澄清的评论答案是在500万的范围内,所以32位整数很大。
答案 1 :(得分:0)
fib_array [i]未初始化。设置fib_array [i]后,尝试将while循环更改为while(true)
并在行上使用if (fib_array[i]<4000000) break;
。
另外,你的sum_of_Even需要是64位整数,所以你需要:
#include <stdint.h>
然后将其声明为uint64_t
。
另一个问题是你没有声明你的fib_array应该有多大,所以没有为它分配实际的内存。试试int fib_array[MAXSIZE];
,其中MAXSIZE是您需要多少条目的计算。
答案 2 :(得分:0)
有关如何修复的建议:
注意@Andrey评论:
“为了记录:这是一个项目欧拉问题,人们强烈建议不要在网上发布解决方案。”
使用long long fib_array[3]
数组。为了生成Fibonacci数,仅使用前2个来生成第3个。在生成Fibonacci数并测试均匀度之后,现在您有3个Fibonacci数,丢弃最年长并重复。
OP的当前int fib_array[]={};
没有分配OP方法所需的数组。 fib_array[i]=
导致UB。
根据@Jules解决方案,即使long
可能不够,请考虑long long
。无论如何,请使用匹配的prinf()
格式说明符。编辑:结果答案是&lt; 5,000,000,因此long
将起作用。
long sum_of_Even = 0;
....
printf("sum of Even terms in the fib sequence = %li\n", sum_of_Even);
答案 3 :(得分:-1)
#include <stdio.h>
#include <string.h>
int main()
{
long i,s=0,f[50];
f[0]=1;
f[1]=1;
for (i=2;f[i]<4000000;i++){
f[i] = f[i-1] + f[i-2];
if (f[i]%2 == 0){
printf("%ld ",f[i]);
s += f[i];
}
}
printf("SUM = %ld\n",s);
return 0;
}