Fibonacci Numbers(斐波那契数列 前四位 后四位)
2015-06-01 20:19
519 查看
题意:http://http://acm.hdu.edu.cn/showproblem.php?pid=3117
如果斐波那契数小于8位的就输出这个数,大于8位的就输出前四位,以及后四位
求后四位可参考这题hdu 1568 Fibonacci
http://http://blog.csdn.net/yhyyxt/article/details/45974537
唯一要注意的一点就是求后四位时,不足四位要补零,一开始就是忘了补零,wa了
如果斐波那契数小于8位的就输出这个数,大于8位的就输出前四位,以及后四位
求后四位可参考这题hdu 1568 Fibonacci
http://http://blog.csdn.net/yhyyxt/article/details/45974537
唯一要注意的一点就是求后四位时,不足四位要补零,一开始就是忘了补零,wa了
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <math.h> using namespace std; #define mod 1000000000 struct mat { __int64 a[2][2]; }; mat mul(mat a,mat b) { mat ret; for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { ret.a[i][j] = (a.a[i][0]*b.a[0][j]+a.a[i][1]*b.a[1][j])%mod; } } return ret; } mat mpower(mat a,int x) { mat I; I.a[0][0] = I.a[1][1] = 1; I.a[0][1] = I.a[1][0] = 0; while(x) { if(x&1) I = mul(I,a); x>>=1; a = mul(a,a); } return I; } int main() { int n; while(cin>>n) { mat tmp; tmp.a[0][0] = tmp.a[0][1] = tmp.a[1][0]=1; tmp.a[1][1] = 0; if(n==0||n==1) { cout<<n<<endl; continue; } tmp = mpower(tmp,n-1); if(n<=39) { int sum = tmp.a[0][0]; cout<<sum<<endl; } else { __int64 a1 = tmp.a[0][0]; double ai = log10((1*1.0)/sqrt(5*1.0)); double bi = n*(log10((1+sqrt(5*1.0))*1.0/2))+ai; bi = bi-floor(bi); bi = pow(10,bi); int a2 = (int)(bi*1000); cout<<a2<<"..."; int p[4]; for(int i=0;i<4;i++) { p[i] = a1%10; a1/=10; } for(int i=3;i>=0;i--) cout<<p[i]; cout<<endl; } } return 0; }
相关文章推荐
- 【Android】仿微信通讯录中的右侧字母表控件
- 黑马程序员——java基础----集合框架知识点总结(一)
- 关于List操作排序工具,collection.sort的原理
- 阅读程序 多重继承
- java web tomcat,myeclipse, mysql
- 我想过不打扰,却发现做不到。
- 集合框架(四)如何使用以及何时使用HashSet、LinkedHashSet或者TreeSet来存储元素
- Jsp初探2015-06-01
- html5语义化标签(二)
- 创建了对嵌入的互操作程序集间接引用,无法嵌入互操作类型
- 启动代码和Bootloader区别
- 使用预处理语句实现数据查询的方法
- 在PowerPoint插入可计算和排序表格ppt模板素材
- Android属性动画完全解析(上),初识属性动画的基本用法 .
- 九度OJ-题目1510:替换空格
- HTML语义化标签(一)
- 织梦ajax登陆
- 关于利用Postfix邮件网关接收外网投递邮件失败问题的解决方法
- 集合框架(三)使用Iterator接口来遍历一个集合和使用for-each循环简化
- Java参数检查