zoukankan      html  css  js  c++  java
  • hdu1568斐波那契前4位

    题意:
         就是求斐波那契数,但是只要求输出前四位,(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
    " ,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
    " ,int(a));
        }
        return 0;
    }
        
    



  • 相关阅读:
    java基础之System类
    java基础之System类
    java基础之Random类
    java基础之Math类
    java基础之Math类
    java基础之Character类概述
    MySQL数据库
    JavaScript面向对象与原型
    PHP
    sass基础用法
  • 原文地址:https://www.cnblogs.com/csnd/p/12062854.html
Copyright © 2011-2022 走看看