HDU 1568

Posted xFANx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1568相关的知识,希望对你有一定的参考价值。

给定n,0 <= n <= 100000000,斐波那契数列的第n项的前四位(不足则全部输出)

 

利用不动点去解得斐波那契数列的公式,显然数据爆longlong,所以以10为底取对数即可

 

前20项不足10000,预处理会更方便

 

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <vector>
 7 #define max(x, y) (x > y ? x : y)
 8 #define min(x, y) (x > y ? y : x)
 9 #define INF 0x3f3f3f3f
10 #define mod 1000000007
11 #define Yes printf("Yes\n")
12 #define No printf("No\n")
13 using namespace std;
14 typedef long long LL;
15 typedef pair<int, int> PII;
16 
17 int n;
18 
19 const int maxn = 30;
20 
21 int f[maxn] = {0, 1, 1};
22 
23 int main(int argc, const char * argv[]) {
24     for (int i = 3; i <= 20; i++) {
25         f[i] = f[i - 1] + f[i - 2];
26     }
27     //printf("%d\n", f[20]);
28     while (~scanf("%d", &n)) {
29         if (n <= 20) {
30             printf("%d\n", f[n]);
31         } else {
32             double tmp = -0.5 * log(5.0) / log(10.0) + ((double)n) * log((sqrt(5.0)+1.0)/2.0) / log(10.0);
33             tmp -= floor(tmp);
34             tmp = pow(10.0, tmp);
35             while (tmp < 1000) tmp *= 10;
36             printf("%d\n", (int)(tmp));
37         }
38     }
39     return 0;
40 }

 

以上是关于HDU 1568的主要内容,如果未能解决你的问题,请参考以下文章

hdu1568 Fibonacci---前4位

HDU1568

HDU 1568

HDU1568 Fibonacci斐波拉契数列

hdu1568&&hdu3117 求斐波那契数前四位和后四位

[hdu 1568] Fibonacci数列前4位