hdu1568斐波那契前4位
2024-10-12 04:31:12
题意:
就是求斐波那契数,但是只要求输出前四位,(n<=100000000)。
思路:
这个要用到斐波那契的公式和一些log的规律,直接打看着很乱,直接在网上偷张图片吧:
然后就是一些log的性质
log10(a^b) = b * log10(a),log10(a*b) = log10(a) + log10(b)
我们可以根据这个把大数的前几位拿出来,这样:
log10(1234567890)
= log10(1.234567890 * 10^9)
= log10(1.234567890) + 9
这样我们就得到了一个"小数部分"bit = log10(1.234567890)
然后pow(10.0 ,bit) = 1.234567890
这样我们就得到了一个大数的科学技术法的前边部分,想要四位,直接*1000取整就行了。
#include<stdio.h>
#include<math.h>
int num[25];
void ini()
{
num[0] = 0 ,num[1] = 1;
for(int i = 2 ;i <= 20 ;i ++)
num[i] = num[i-1] + num[i-2]; } int main ()
{
ini();
int n;
while(~scanf("%d" ,&n))
{
if(n <= 20)
{
printf("%d\n" ,num[n]);
continue;
}
double now = -0.5 * log10 (5.0) + n * 1.0 * log10((1+sqrt(5.0))/2.0);
double bit = now - (int)now;
double a = pow(10.0,bit);
a *= 1000;
printf("%d\n" ,int(a));
}
return 0;
}
最新文章
- Android中利用AIDL机制调用远程服务
- css3属性flex弹性布局设置三列(四列)分布样式
- 在 NetBeans IDE 6.0 中分析 Java 应用程序性能
- C++学习基础十——子类构造函数与析构函数的执行
- webServer xampp的安装及使用
- Eclipse控制台中文乱码
- VC++大数据量绘图时无闪烁刷屏技术实现(我的理解是,在内存上作画,然后手动显示,而不再直接需要经过WM_PAINT来处理了)
- 《图解HTTP》 第11章 web的攻击技术
- gauge.js的应用
- C# webservice开发
- Code Forces 448C Painting Fence 贪婪的递归
- 后端数据库使用 Bomb方案
- 关于canvas画布使用fillRect()时高度出现双倍效果解决办法
- slice、splice与split傻傻分不清
- PHP秒杀系统 高并发高性能的极致挑战(完整版)
- JAVA中的糕富帅技术——反射(一)
- 【zheng环境准备】安装activemq
- 转:cookie.setPath()用法
- oracle--分组后获取每组数据第一条数据
- 2016-3-19日小结:scrollTop