C语言练习求助
我今天遇到一道C语言题目,知道要用到“高精度算法”,可是具体的算法及程序我不知道怎么来实现,希望哪位高手能帮帮我的忙。题目如下:
Fibonacci数列问题
背景:
Fibonacci 数列有如下特点:其第 1 , 2 项均为 1 , 1 。从第 3 个数开始,该数是其前两个数之和 . 即 :
F1=1 (n=1)
F2=1 (n=2)
Fn=Fn-1+Fn-2 (n>=3)
请你编写一个函数 fun ,它的功能是:对于一个给定的 数( N ), 求不大于 N 的最大 Fibonacci 数。
输入
输入的第一行是一个正整数,表示下面有几组数据需要计算。之后的每一行是一个数据 N ,其中 1 < N <= 101000 。
输出
对应输入的每一行,输出一个 不大于 N 的最大 Fibonacci 数。
测试输入 期待的输出 时间限制 1秒 内存限制 20480KB
测试用例 0 以文本方式显示
1: 2
2: 9
3: 1234567890
以文本方式显示
1: 8
2: 1134903170
----------------解决方案--------------------------------------------------------
在论坛上翻一翻.
----------------解决方案--------------------------------------------------------
我这个能算了,但是肯定不满足你的条件..你改一下
#include "stdio.h"
#include"malloc.h"
int fabc(int n)
{
if(n==1||n==2)
return 1;
else
return fabc(n-1)+fabc(n-2);
}
long* exam( int i)
{ long *a=(long *)malloc(sizeof(long)*i);
int n=1;
for(int j=0;j<i;j++)
{ printf("%d: ",j+2);
scanf("%d",a+j);
fflush(stdin);
}
for(j=0;j<i;j++)
{
while(*(a+j)>fabc(n))
n++;
a[j]=fabc(n-1);
n=1;
}
return a;
}
int main()
{
int n;
long *p;
printf("1: ");
scanf("%d",&n);
fflush(stdin);
p=exam(n);
for(int i=0;i<n;i++)
{
printf("%ld %ld\n",i+1,*(p+i));
}
return 1;
}
----------------解决方案--------------------------------------------------------