Fibonacci
Fibonacci 同项公式:
求对数后:
由于 很小,所以可以忽略。
log10 (Fibonacci [n] ) = -0.5 * log10(5.0) + ((double)n) * log10((sqrt(5.0) + 1.0) / 2.0);
Fibonacci [n] ≈ pow (10.0,log10(Fibonacci [n] )) * 10^k。 这里,需要取多少位,用 K 控制。
#include <iostream> #include <cmath> int main() { int n,i; const int N=21; int f[N]={0,1}; for(i=2;i<N;i++) f[i]=f[i-1]+f[i-2]; while(~scanf("%d",&n)) { if(n<N) printf("%d\n",f[n]); else{ double t=-0.5*log10(5.0)+n*log10((1+sqrt(5.0))/2); t=t-(int)t; double ans=pow(10.0,t); printf("%d\n",(int)(ans*1000)); } } return 0; }