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;
} 展开
这个数列从第三项开始,每一项都等于前两项之和。小明想知道第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;
} 展开
3个回答
展开全部
#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 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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
感觉可以用大整数写,即用数组模拟加法,每个数组元素存几位数字。网上可以搜一下这方面的东西。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询