hoj1568

Fibonacci数列的通项公式中由于(sqrt(5)-1)^n太小了,所以可以忽略,但是n必须大于16。这道题就是应用通项公式对10取对数的方法来做的,去除对数的整数部分就相当于把结果除以许多个10。

View Code
#include<stdio.h>
#include
<math.h>
#define a (sqrt(5.0)+1.0)/2
int main()
{
int n,i,j,t,f[21]={0,1};
double ans;
for(i=2;i<21;i++)
f[i]
=f[i-1]+f[i-2];
while(scanf("%d",&n)!=EOF)
{
if(n<21)printf("%d\n",f[n]);
else
{
ans
=-0.5*(log10(5.0))+n*log10(a);
ans
-=(int)ans;
ans
=pow(10.0,ans);
while(ans<1000)ans*=10;
printf(
"%d\n",(int)ans);
}
}
return 0;
}
posted @ 2011-03-19 15:45  金海峰  阅读(136)  评论(0编辑  收藏  举报