注册 登录
编程论坛 C语言论坛

费波那契数列问题

greenpop 发布于 2019-06-09 19:56, 1400 次点击
#include<stdio.h>
int main()
{
    int a=1,b=1;
    int m,n;
    int i;
    printf("请输入项数:\n");
    scanf("%d",&m);
    if(m%2==0)
    {
        n=m/2;
         for(i=0;i<n;i++)
        {
        printf("%d %d ",a,b);
        a=a+b;
        b=a+b;
        }
    }
    else
    {
        n=m/2;
       for(i=0;i<n;i++)
            {
             printf("%d %d ",a,b);
             a=a+b;
             b=a+b;
            }
            printf("%d",a);
        }
    return 0;

}
各位大佬,为什么上面的程序运行到47项以后,会出现负数。谢谢指教。
2 回复
#2
吕孟伟2019-06-09 20:16
数列计算到后面数字太大,int类型存放不了,出现负数。
程序代码:

#include<stdio.h>
int main()
{
    double a=1,b=1;
    int m,n;
    int i;
    printf("请输入项数:\n");
    scanf("%d",&m);
    if(m%2==0)
    {
        n=m/2;
         for(i=0;i<n;i++)
        {
        printf("%25.0lf %25.0lf \n",a,b);
        a=a+b;
        b=a+b;
        }
    }
    else
    {
        n=m/2;
       for(i=0;i<n;i++)
            {
             printf("%25.0lf %25.0lf \n",a,b);
             a=a+b;
             b=a+b;
            }
            printf("%25.0lf",a);
        }
    return 0;

}
}

代码输出:
请输入项数:
47
                        1                         1
                        2                         3
                        5                         8
                       13                        21
                       34                        55
                       89                       144
                      233                       377
                      610                       987
                     1597                      2584
                     4181                      6765
                    10946                     17711
                    28657                     46368
                    75025                    121393
                   196418                    317811
                   514229                    832040
                  1346269                   2178309
                  3524578                   5702887
                  9227465                  14930352
                 24157817                  39088169
                 63245986                 102334155
                165580141                 267914296
                433494437                 701408733
               1134903170                1836311903
               2971215073

[此贴子已经被作者于2019-6-9 20:37编辑过]

#3
蒟蒻2019-12-10 16:23
回复 2楼 吕孟伟
要是再大点的数超过double的范围又该怎么办
1