标题:[求助]Fibonacci的一个问题
只看楼主
davidloves
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-1-6
 问题点数:0 回复次数:1 
[求助]Fibonacci的一个问题

一个Fibonacci数列是这样定义的: f(1) = 1, f(2) = 1, f(n > 2) = f(n - 1) + f(n - 2)
现在, 对于每个给定的数K,计算f(K)的位数

我的程序

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (void)
{
int cas; /* the number of cases*/
int num;
double q = sqrt(5);
double result;

scanf ("%d", &cas);
while (cas--)
{
scanf ("%d", &num);
result = log10((pow((1.0 + q) / 2, num) - pow((1.0 - q) / 2, num)) / q) ;
printf ("%.0lf\n", ceil(result + 0.000000001));
}

return 0;
}

但是只要数一大,我就错误,因为pow函数那里如果数大了,会溢出,哪位能把它修改一下,不用POW函数。。

[此贴子已经被作者于2007-9-22 21:40:40编辑过]

搜索更多相关主题的帖子: Fibonacci 
2007-09-22 21:40
lg_mic
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-9-18
得分:0 
回复:(davidloves)[求助]Fibonacci的一个问题
这个你看行不行,用以前的一个递推求Fibonacci数列的程序改的

#include<stdio.h>
#include<stdlib.h>
int main()
{
int f1=1,f2=1,f3,i=2,k;
scanf("%d",&k);
while(1)
{
f3=f1+f2;
f1=f2;
f2=f3;
i++;
if(f3==k) break;
else if(f3>k)
{
printf("wrong number");
system("pause");
exit(1);
}

}
printf("%d",i);
system("pause");
return 0;
}

缺点是不能求第1、2位的,3位以后的好象都可以。你是要求位数吧?

还是这个意思?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int f1=1,f2=1,f3,i,k;
scanf("%d",&k);
for (i=3;i<=k;i++)
{
f3=f1+f2;
f1=f2;
f2=f3;
}
printf("f(%d)=%d\n",k,f3);
system("pause");
return 0;
}
输入f是第几位,求该位的数值。

2007-09-22 22:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-172170-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.406834 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved