hdu1568斐波那契前4位
斐波
2023-09-11 14:14:00 时间
题意:
就是求斐波那契数,但是只要求输出前四位,(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
就是求斐波那契数,但是只要求输出前四位,(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; }
相关文章
- Java实现 蓝桥杯 历届试题 斐波那契
- Java实现斐波那契数列的多种方法
- python实现斐波那契数列
- 使用模板元编程快速的得到斐波那契数。。
- 重新整理数据结构与算法—— 斐波那契二分查找法[十四]
- 717. 简单斐波那契
- 【历年真题】斐波那契数列logn做法
- Java_斐波那契数列_兔子生兔子算法
- 5.1 斐波那契数列
- 斐波那契数列
- 【编程实践】Linux Shell 编程:使用 循环和递归 实现斐波那契数列代码
- Java实现斐波那契数列Fibonacci
- 【基础知识】~ 硬核/软核/固核、PWM/SPWM、斐波那契数列、大端模式存储、傅里叶变换、奈奎斯特采样定律、芯片选型、基尔霍夫定律、FIR/IIR 滤波器