chinalixs 发表于 2015-2-9 14:09

很基础的斐波那契,为何我输入偶数就停止运行。

本帖最后由 chinalixs 于 2015-2-9 14:10 编辑

斐波那契这个方法太多了。

但我发现几个问题。

一个是用普通的写法,当N大于48的时候,数会变成负的,网上搜了也有变成负数的,关键不知道怎么解决。求助!
你可以自己随手写一个试试,我就不上图了。

第二个问题,我用这个写法为何输入奇数能数出结果,输入偶数就运行错误呢。我刚入门,完全找不到错误。谢谢大家了!
上代码:
#include<stdio.h>
#include<malloc.h>
int main(){
      int i,n;
      scanf("%d",&n);

      int* arr=(int *)calloc(n,sizeof(int));

      arr=arr=1;

      for(i=2;i<=n;i++)
      {
                arr=arr+arr;
      }
      printf("%d",arr);
      return 0;
}

homer 发表于 2015-2-9 14:23

变成负数是因为超出了int类型的最大数字限制导致溢出。你可以使用double等替代,下面是我的简单粗暴的代码~
#include<stdio.h>
main()
{
    double a=0,b=1,c,i,n=1;
    scanf("%lf",&i);
    for(;n<i;n++)
   {   
      c=a+b;
                a=b;
                b=c;      
   }
    if(i==0) c=0;
    if(i==1) c=1;
    printf("%0.0lf",c);
}

homer 发表于 2015-2-9 14:48

这个是我帮你改过的
#include<stdio.h>
#include<malloc.h>
int main(){
   
                int i,n;
      scanf("%d",&n);

      double* arr=(double *)calloc(50,sizeof(double));

      arr=0.0;
                arr=1.0;

      for(i=2;i<51;i++)
      {
                arr=arr+arr;
      }
      printf("%0.0lf\n",arr);
                return 0;
}

醉空流澈 发表于 2015-2-9 14:47

第一个问题如homer所说。我的话,就用long。
至于第二个问题,我试了下,不会诶。=_=

Anonymouss 发表于 2015-2-9 19:38

啦啦啦 楼主~

问题一:
int的范围是 -(2^31) ~ (2^31-1),也就是-2147483648 ~ 2147483647;
你看看当n = 47 时 F(n) = 2971215073 >2147483647 ,其实这个时候结果就已经溢出了,不正确了~
可以用long long int类型~ 它的范围是-(2^61) ~ (2^61-1),更安全,当然也有界限。

问题二:
楼主的代码没有问题,但是你看看for语句运行到了 i = n,而你动态分配的数组a 只有n个空间,a是数组越界的哦~
至于为什么奇偶不同结果,应该和编译器的处理错误的环境有关,至少我用codeblocks 就可以得到正常结果。

{:301_986:}

chinalixs 发表于 2015-2-11 08:49

homer 发表于 2015-2-9 14:23
变成负数是因为超出了int类型的最大数字限制导致溢出。你可以使用double等替代,下面是我的简单粗暴的代码~ ...

谢谢啦。你们俩真好。

chinalixs 发表于 2015-2-11 08:49

homer 发表于 2015-2-9 14:48
这个是我帮你改过的
#include
#include


谢谢啦。你们俩真好。

chinalixs 发表于 2015-2-11 10:02

homer 发表于 2015-2-9 14:23
变成负数是因为超出了int类型的最大数字限制导致溢出。你可以使用double等替代,下面是我的简单粗暴的代码~ ...

亲。如果现在我想对c取余怎么办!c是double类型。。。

chinalixs 发表于 2015-2-11 10:04

Anonymouss 发表于 2015-2-9 19:38
啦啦啦 楼主~

问题一:


果真是codeblocks更强大。可惜比赛限定了编译环境。我再想办法解决!

chinalixs 发表于 2015-2-11 10:08

Anonymouss 发表于 2015-2-9 19:38
啦啦啦 楼主~

问题一:


帮忙看下我换了longlong int 怎么不输出!没有语法错误。上代码
#include<stdio.h>
main()
{
    long long int a=1,b=1,c,n,i=1;
    scanf("%d",&n);
    for(;i<n;i++)
   {   
      c=a+b;
      a=b;
      b=c;      
   }
    if(n==1) c=1;
    if(n==2) c=1;
    printf("%d",c);
}
页: [1] 2
查看完整版本: 很基础的斐波那契,为何我输入偶数就停止运行。