码迷,mamicode.com
首页 > 其他好文 > 详细

hdu1568 Fibonacci---前4位

时间:2018-03-31 23:59:37      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:AC   dig   不可   names   math   需要   pid   logs   重要   

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1568

题目大意:

求斐波那契数列第i项的前四位。i<1e8

思路:

由于数据范围大,不可能打表,所以应该从通项公式入手:

通项公式:

技术分享图片

 我们稍微将公式转化一下,再取个对数。

技术分享图片

技术分享图片

而我们要取Fibonacci数的前4位,可以通过计算以10为底的对数,原理与HDU 1060 Leftmost Digit是一样的

另外,需要提及的一点是前20项Fibonacci数需要自己计算,一方面是因为Fibonacci数未满4位,更重要的一点是Fibonacci数较小时,公式的精确度不高,所以需要打表前20项。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 using namespace std;
 5 typedef long long ll;
 6 const int maxn = 1e5;
 7 ll a[25];
 8 int main()
 9 {
10     int n;
11     a[1] = 1;
12     for(int i = 2; i <= 20; i++)a[i] = a[i - 1] + a[i - 2];
13     while(cin >> n)
14     {
15         if(n < 21)
16         {
17             cout<<a[n]<<endl;
18         }
19         else
20         {
21             double s = log10(1.0/sqrt(5.0)) + n * 1.0 * log10((1 + sqrt(5.0))/2);
22             s -= (int)s;
23             s = pow(10, s);
24             while(s < 1000)s *= 10;
25             cout<<(int)(s)<<endl;
26         }
27     }
28     return 0;
29 }

 

hdu1568 Fibonacci---前4位

标签:AC   dig   不可   names   math   需要   pid   logs   重要   

原文地址:https://www.cnblogs.com/fzl194/p/8682757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!