Fibonacci数列问题 求解 谢谢了~没分可加了 。。

来源:百度知道 编辑:UC知道 时间:2024/06/08 18:27:58
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 数。
注意是高精度高手些不要用C++编啊 要 C。。
谢谢了
谢谢你的回答 但是不是我要的答案 你这个答案是非高精度算法的 ~~
因为TC是16位系统 整数表示的范围不够,
long 也不够的 这个数列的第100项就已经超过LONG 了 DOUBLE 也不行的

最后一楼格式不对:给个参考用例吧
测试输入:
2
9
1234567890
测试输出:
8
1134903170

帮你改了一下,测试没有问题
-----------------------------------------------------------------------------
/*
* fib.c
*/
#include <stdio.h>
#define MAX_NUM 100

char a[MAX_NUM];
char b[MAX_NUM];
char c[MAX_NUM];

/*计算第N项*/
char *fibonacci(unsigned long N)
{
unsigned long i;
int k,tmp,flag;
memset(a,0,MAX_NUM);
memset(b,0,MAX_NUM);
memset(c,0,MAX_NUM);
a[0]=1;
b[0]=1;
c[0]=1;

if(N<3) return c;

for(i=3;i<=N;i++)
{
k=0;
flag=0;
while(k<MAX_NUM)
{
tmp = a[k]+b[k]+flag;
c[k] =tmp%10;
flag =tmp/10;
k++;
}
memcpy(a,b,MAX_NUM);
memcpy(b,c,MAX_NUM);
}
return c;
}
/*比较两个数的大小*/
int CompareFibonacci(char *f1, char *f2)
{
char tmp[MAX_NUM];
int i=0,t,flag=0;
int flag0=0;

while(i<MAX_NUM)
{
t=f1[i]-f2[i]-flag;
if(t<0)