#include <stdlib.h>
#include <stdio.h>
int main(){
int n, cont, fib, na = 0, nb = 1, sum_even = 0;
printf ("Insert a number and I'll tell you the respective Fibonacci: ");
scanf ("%d", &n);
for (cont = 1; cont < n; cont++) {
na += nb;
nb = na - nb;
fib = na + nb;
if (fib % 2 == 0) {
sum_even += fib;
}
}
printf ("%d\n", sum_even);
return 0;
}
我试图做欧拉项目Problem 2,然后我想出了这个代码。问题是:由于内存溢出,我无法找到斐波那契数列超过400或更近的数字的总和。因此,我不能解决这个问题,因为它要求在斐波那契序列中找到低于4000000的对数之和。谁能帮我?我试图使用浮点型数字来增加答案的容量,它似乎工作到一千年左右,但如果我尝试使用更大的数字,我得到一个在15秒后在bash中的-nan错误的处理(我真的不知道它是什么意思)。C中的内存溢出
#include <stdlib.h>
#include <stdio.h>
int main() {
int n, cont, div;
float sum_even = 0, na = 0, nb = 1, fib;
printf ("Insert a number and I'll tell you the respective Fibonacci: ");
scanf ("%d", &n);
for (cont = 1; cont <= n; cont++) {
na += nb;
nb = na - nb;
fib = na + nb;
div = fib/2;
if (div % 2 == 0) {
sum_even += fib;
}
}
printf ("%f\n", sum_even);
return 0;
}
是的。我也在回答同样的问题。但是也许需要很长的时间,然而int需要。 – Aslan986
这里不需要'fib(34)= 5702887> 4000000',所以总和很容易适合32位int。以后有很多问题需要64位整数。 –
谢谢!现在我明白了我的错误。无论如何,我要看看这些长整数,双倍和东西。我对编程还很陌生,所以我一点都不了解。 –