zoukankan      html  css  js  c++  java
  • hdu1568 Fibonacci---前4位

    题目链接:

    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 }
  • 相关阅读:
    su和sudo命令详解
    JS线程Web worker
    Navicat 批处理 自动备份数据库
    MySql【Error笔记】
    vue入门
    动态库
    环境变量
    cmake_learn
    自动编译
    网络编程
  • 原文地址:https://www.cnblogs.com/fzl194/p/8682757.html
Copyright © 2011-2022 走看看