HDU 1568 Fibonacci
2024-10-12 20:41:49
题解:首先,对于小于10000的斐波那契数,我们直接计算,当大于10000时,用公式,由于只要输出前四位,所以不用考虑浮点数的问题,算出其取log的结果:
tmp=(log(sq5/5)+n*log(0.5+sq5/2))/log(10.0)
然而为什么要取log呢,考虑这样的情况,若结果前四位为1493,那么计算的结果一定是log(10^n*1.493……)=log(1.493……)+n,那么只要减去整数部分,就得到log(1.493……),
将结果加3,得到log(1.493……)+3=log(1493.……),然后计算一下10的幂后取整就是结果了。
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
int fib[100],fibs;
fib[0]=0,fib[1]=1;
for(fibs=2;fib[fibs-1]<10000;fibs++)fib[fibs]=fib[fibs-1]+fib[fibs-2];
fibs-=2;
int n;
double sq5=sqrt(5);
while(scanf("%d",&n)!=EOF){
if(n<=fibs)printf("%d\n",fib[n]);
else{
double tmp=(log(sq5/5)+n*log(0.5+sq5/2))/log(10.0);
tmp=tmp-int(tmp);
printf("%d\n",(int)pow(10,tmp+3));
}
}
return 0;
}
最新文章
- 正确制作一个iframe,认识iframe
- WebService -- Java 实现之 CXF ( 使用Spring添加拦截器)
- URL和URI区别
- paip.gui控件form窗体的原理实现以及easyui的新建以及编辑实现
- 1.Oracle数据库概述
- 【转】SharePoint工作流中常用的方法
- myeclipse使用SVN团队开发
- Aptana jQuery自动提示
- Java 多线程详解(一)------概念的引入
- delphi 数组复制利用CopyMemory 最为完美
- css中的em 简单教程 -- 转
- 【Android 应用开发】 Fragment 详解
- Elasticsearch【快速入门】
- ALL_SOURCE
- 常用的 jQuery 事件
- jenkins(3): jenkins执行shell命令
- Golang遇到的一些问题总结
- 问题1:设置了text-overflow : ellipsis未起作用
- iconfont阿里巴巴矢量图标库批量保存
- HttpFileCollection类