HDU 1568 - Fibonacci
2011-11-10 10:13
288 查看
知识点:数论
1、首先要知道 Fibonacci 数列的通项公式:F(N)=(1/√5)*[((1+√5)/2)^n-((1-√5)/2)^n] (n=1,2,3……)
2、任何一个数 num 都可以写成 10^(m+n) 的形式,其中 m 为整数,n 为小数。则 10^n 就是 num 写成科学计数法时的小数部分;m+1 为 num 的位数。
例如:10234432=10^(7+0.010063774)。其中:m=7,n=0.010063774,10^n=1.0234432。
那么,num 的左数几位或者第几个数字都是可以求的。左 3 位就用 10^n*100 取整,左 4 位就用 10^n*1000 取整……
1、首先要知道 Fibonacci 数列的通项公式:F(N)=(1/√5)*[((1+√5)/2)^n-((1-√5)/2)^n] (n=1,2,3……)
2、任何一个数 num 都可以写成 10^(m+n) 的形式,其中 m 为整数,n 为小数。则 10^n 就是 num 写成科学计数法时的小数部分;m+1 为 num 的位数。
例如:10234432=10^(7+0.010063774)。其中:m=7,n=0.010063774,10^n=1.0234432。
那么,num 的左数几位或者第几个数字都是可以求的。左 3 位就用 10^n*100 取整,左 4 位就用 10^n*1000 取整……
#include <cstdio> #include <cmath> int main() { int f[21]; f[0]=0;f[1]=1; for(int i=2;i<=21;++i) f[i]=f[i-1]+f[i-2]; int n; while(scanf("%d",&n)!=EOF) { if(n<=20) printf("%d\n",f ); else { double temp=-0.5*log10(5.0)+1.0*n*log10((1.0+sqrt(5.0))/2.0); temp-=(int)temp; int ans=(int)(pow(10.0,temp)*1000); printf("%d\n",ans); } } return 0; }
相关文章推荐
- 数论(fabonacci数列) hdu-1568-Fibonacci
- HDU 1568 Fibonacci(简单数论)
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci ★(取科学计数法)
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci(数学 递推式)
- HDU 1568 Fibonacci
- hdu1568 Fibonacci
- HDU 1568 Fibonacci
- 数论(fabonacci数列) hdu-1568-Fibonacci
- HDU 1568 Fibonacci 公式 *
- HDU 1568 Fibonacci 【FIB通项公式+log10取前N为位数】
- HDU 1568 Fibonacci 公式求斐波那契数列
- hdu 1568 fibonacci
- hdu 1568 Fibonacci解题思路
- HDU 1568 Fibonacci
- hdu 1568 Fibonacci
- 【HDU 1568】Fibonacci 数学公式 详解