C中的内存溢出

Luc*_*ori 3 c

#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;
}
Run Code Online (Sandbox Code Playgroud)

我试图做项目欧拉问题2,然后我想出了这个代码.问题是:我找不到斐波那契序列中对数的总和,因为数字超过400或接近数字,因为内存溢出.因此,我无法解决这个练习,因为它要求在斐波那契序列中找到4000000以下的对数的总和.谁能帮我?

编辑:我试图使用浮点数类型来增加答案的容量,它似乎工作到一千左右,但如果我尝试更大的数字,我在bash中得到一个-nan错误,像处理15秒(我不真的知道这意味着什么.

#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;
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 15

你观察到的不是内存溢出,而是数字溢出.练习的重点是表明溢出确实发生了,并让你学习处理它的技巧.在这种特殊情况下,他们希望您实现任意精度整数运算,或者借用预先制定的实现并将其与您的解决方案一起使用.