hdu1568 Fibonacci
2015-08-13 17:22
399 查看
题目(http://acm.hdu.edu.cn/showproblem.php?pid=1568)
Fibonacci 的基本递推公式:
0 if n=0;
F(n)= 1 if n=1;
F(n-1)+F(n-2) if n>1.
求解递推方程就可以解出如下的通项公式封闭形式的通项公式:
下面举例来说明计算前4位
123456.32=1234.56*10^2
s=d.xxx*10^(len-4)
log10(s)=log10(d.xxxxx)+log10(10^(len-4))=log10(d.xxxx)+len-4;
log10(s)+4-len=log10(d.xxxx)
d.xxxx=10^(log10(s)+4-len)
s=(1/sqrt(5))*[(1+sqrt(5))/2.0]^i;
len=(int)log10(s)+1;
d.xxxx=10^(log10(s)+4-((int)log10(s)+1))=10^(log10(s)-(int)log10(s)+3);
Fibonacci 的基本递推公式:
0 if n=0;
F(n)= 1 if n=1;
F(n-1)+F(n-2) if n>1.
求解递推方程就可以解出如下的通项公式封闭形式的通项公式:
下面举例来说明计算前4位
123456.32=1234.56*10^2
s=d.xxx*10^(len-4)
log10(s)=log10(d.xxxxx)+log10(10^(len-4))=log10(d.xxxx)+len-4;
log10(s)+4-len=log10(d.xxxx)
d.xxxx=10^(log10(s)+4-len)
s=(1/sqrt(5))*[(1+sqrt(5))/2.0]^i;
len=(int)log10(s)+1;
d.xxxx=10^(log10(s)+4-((int)log10(s)+1))=10^(log10(s)-(int)log10(s)+3);
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int data[30]={0,1}; int main() {for(int i=2; i<=20; i++) data[i]=data[i-1]+data[i-2]; int m; while(cin>>m) {if(m<21)//前20位打表小于10000 cout<<data[m]<<endl; else { double y=log10(1.0/sqrt(5))+m*log10((1.0+sqrt(5))/2.0) +4-(int)(log10(1.0/sqrt(5))+m*log10((1.0+sqrt(5))/2.0)+1); int ans=(int)pow(10.0,y); cout<<ans<<endl; } } return 0; }
相关文章推荐
- HDU 1075 What Are You Talking About trie树
- 深入探讨:标签(Tag)的各种设计方案
- sql两个表联合更新
- 【面试的坑】行内元素是否可以设置宽高
- iOS基础-UIKit框架-多控制器管理-控制器创建和控制器view的创建
- 新著社会保险概论的价值
- weblogic的集群与配置
- Android自动化测试框架
- fibonacci(n<=10000)
- POJ-3984-迷宫问题
- javascript闭包
- ViewDragHelper实战 自己打造Drawerlayout
- ZOJ 1203 Swordfish 最小生成树 Kruscal && Prim
- 更好的测试用例设计
- 勿忘初心
- hdu 5387 clock (时间夹角的计算)
- hdu 5387 Clock
- OpenCV在明暗不同或光线不均的图片上查找轮廓-应用在Android NDK
- Ubuntu 下NFS安装配置
- Objective-C:MRC手动释放对象内存举例(引用计数器)