C语言 斐波那契数列怎么写

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……这个数列从第三项开始,每一项都等于前两项之和。小明想知道第N项斐波那契数列是多少。第一行是测试数据... 斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……
  这个数列从第三项开始,每一项都等于前两项之和。小明想知道第N项斐波那契数列是多少。
第一行是测试数据的组数T,后面跟着T行输入。每组测试数据占一行,包括一个正整数N(0<N≤100000)。
每个测试数据输出一行表示第N项斐波那契数列的结果。由于后面的斐波那契数列实在太大了,因此当答案超过一位时,只需输出它的首位和尾位,中间用空格分开。
Sample Input

2
3
7

Sample Output

2
1 3

写出来是错的。也不知道哪错了。求帮忙看看。怎么写。听别人说是数据太大了
#include<stdio.h>
int main()
{int x1,x2,x,repeat,n,temp,a,i,temp2;
scanf("%d",&n);
for(repeat=1;repeat<=n;repeat++)
{x1=1;x2=1;x=1;
scanf("%d",&a);
if(a>=3)
for(i=3;i<=a;i++)
{
x=x1+x2;
temp=x;
x1=x2;
x2=temp;}
temp2=x;
if(x<10)
printf("%d\n",x);
else
{while(x>=10)
{x=x/10;}
while(temp2>10)
{temp2=temp2%10;
}
printf("%d %d\n",x,temp2);
}
}
return 0;
}
展开
 我来答
快先带儿子走
推荐于2017-10-18 · TA获得超过275个赞
知道小有建树答主
回答量:271
采纳率:33%
帮助的人:175万
展开全部
#include<stdio.h>
int fei(int index)     //数组实现
{
    if(index<1)
    {
        return -1;
    }
    if(index<3)
    {
        return 1;
    }
    int *a=new int[index];
    a[0]=a[1]=1;
    for(int i=2; i<index; i++)
        a[i]=a[i-1]+a[i-2];
    int m=a[index-1];
    delete a;         //释放内存空间
    return m;
}
int tou(int i)       //取第一位
{
    while(i>9)
        i/=10;
    return i;
}
int main()
{
    int n,a[100];
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d",&a[i]);
    for(int i=0; i<n; i++)
    {
        if(fei(a[i])>9)
            printf("%d %d\n",tou(fei(a[i])),fei(a[i])%10);
        else
            printf("%d\n",fei(a[i]));
    }
}
匿名用户
2017-10-18
引用快先带儿子走的回答:
#include<stdio.h>int fei(int index) //数组实现{ if(index<1) { return -1; } if(index<3) { return 1; } int *a=new int[index]; a[0]=a[1]=1; for(int i=2; i<index; i++) a[i]=a[i-1]+a[i-2]; int m=a[index-1]; delete a; //释放内存空间 return m;}int tou(int i) //取第一位{ while(i>9) i/=10; return i;}int main(){ int n,a[100]; scanf("%d",&n); for(int i=0; i<n; i++) scanf("%d",&a[i]); for(int i=0; i<n; i++) { if(fei(a[i])>9) printf("%d %d\n",tou(fei(a[i])),fei(a[i])%10); else printf("%d\n",fei(a[i])); }}
展开全部
# include <stdio.h>
int main (void)
{
int a, b, c, d, n;
printf("请输入您需要查找的序列号: ");
scanf("%d", &n); // n 为要查找的序列; d 用来循环计次; c 用来求n项的值;
a = 0; //第零列
b = 1; //第一列
if (n == 1)
printf("序列号1值为: 1\n");
else if (n == 2)
printf("序列号2值为: 1\n");
else
{
for (d=2; d<n+1; ++d)
{
c = a + b;
a = b;
b = c;
}
printf("序列号%d值为: %d\n", n, c);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1A李腾龙
2015-03-30 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:72
采纳率:0%
帮助的人:57.9万
展开全部
感觉可以用大整数写,即用数组模拟加法,每个数组元素存几位数字。网上可以搜一下这方面的东西。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式