题目链接
分析:一道数学题
找出斐波那契数列的通项公式,再利用对数的性质就可得到前几位的数
斐波那契通项公式如下:
取完对数后(记fn为第n个数)
log10(fn)=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0)+log10(1-((1-√5)/(1+√5))^n) 其中f=(sqrt(5.0)+1.0)/2.0;
最后取对数的小数部分就可得最终结果
代码如下:
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const double f=(sqrt(5.0)+1)/2.0; 8 int fi[20]; 9 int main()10 {11 int n,i;12 double bit;13 fi[0]=0;fi[1]=fi[2]=1;14 for(i=3;i<=20;i++)15 {16 fi[i]=fi[i-1]+fi[i-2];17 }18 while(scanf("%d",&n)!=EOF)19 {20 if(n<=20)21 printf("%d\n",fi[n]);22 else{23 bit=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0);24 bit=bit-(int)bit;25 bit=pow(10.0,bit);26 while(bit<1000)bit*=10;27 printf("%d\n",(int)bit);28 }29 }30 return 0;31 }