NYOJ 461-Fibonacci数列(四)(求斐波那契数列前4位)

原创 2015年07月10日 18:48:09

题目地址:NYOJ 461

思路:斐波那契数列的通项公式为

然后下一步考虑如何产生前4位:

先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c);假设给出一个数10234432,
那么log10(10234432)=log10(1.0234432*10^7)【用科学记数法表示这个数】=log10(1.0234432)+7;
log10(1.0234432)就是log10(10234432)的小数部分.
log10(1.0234432)=0.010063744(取对数所产生的数一定是个小数)
再取一次幂:10^0.010063744=1.023443198,然后减去整数部分,剩下的就是小数部分,让取前4位,只需要将小数部分*1000就好了。

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
int f[30]={0,1,1};
int main()
{
    int n,i;
    double ans;
    int res;
    for(i=3;i<=20;i++)
        f[i]=f[i-1]+f[i-2];
    while(~scanf("%d",&n)){
        double a=(1.0+sqrt(5.0))/2.0;
        if(n<=20)
            printf("%d\n",f[n]);
        else{
            ans=n*log10(a)-0.5*log10(5.0);
            ans=ans-floor(ans);
            ans=pow(10,ans);
            res=(int)(ans*1000);
            printf("%d\n",res);
        }
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

Fibonacci Numbers(斐波那契数列 前四位 后四位)

题意:http://http://acm.hdu.edu.cn/showproblem.php?pid=3117 如果斐波那契数小于8位的就输出这个数,大于8位的就输出前四位,以及后四位   求...
  • YHYYXT
  • YHYYXT
  • 2015年06月01日 20:19
  • 577

acm-Fibonacci数列(四)

Fibonacci数列(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述  数学神童小明终于把0到100000000的Fibonacci数列(f[0]=...
  • zzyy17
  • zzyy17
  • 2013年11月12日 16:43
  • 479

nyoj461 Fibonacci数列(4)解通项公式

Fibonacci数列(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 数学神童小明终于把0到100000000的Fibonacci数列(...
  • u012349696
  • u012349696
  • 2015年03月27日 17:08
  • 508

NYOJ 题目461 Fibonacci数列(四)(数学)

 Fibonacci数列(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述  数学神童小明终于把0到100000000的Fibona...
  • yu_ch_sh
  • yu_ch_sh
  • 2014年10月07日 21:39
  • 477

斐波那契高效算法(4种算法综合分析)

斐波那契数列问题是算法学习者必然接触到的问题,作为经典问题,首次接触时一般是作为递归算法的案例教程。 然而递归解决斐波那契,其效率低的令人发指,有人算出其时间复杂度为O(2^n)。指数级时间复杂度。 ...
  • xygy8860
  • xygy8860
  • 2015年07月27日 17:34
  • 7931

Python - 求斐波那契数列前N项之和

n = int(input("Input N: ")) a = 0 b = 1 sum = 0 for i in range(n): sum += a a, b = b, a + b p...
  • hydhyd2012
  • hydhyd2012
  • 2014年11月11日 21:27
  • 804

JAVA之输出斐波那契数列的前10个数

JAVA之输出斐波那契数列的前10个数
  • netuser1937
  • netuser1937
  • 2017年01月23日 11:16
  • 1545

斐波那契数列累加求前n项和

斐波那契累加求前n项和 写一个斐波那契求和的算法,第一反应太简单了,递归一下就求出来了 常规的方法:...
  • diaoaa
  • diaoaa
  • 2014年05月18日 20:13
  • 3339

求Fibonacci数列前40个数

求Fibonacci数列前40个数。这个数列有以下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即 F1=1                 (n=1) F2=2       ...
  • Gary_888
  • Gary_888
  • 2016年05月14日 11:07
  • 4228

输出斐波那契数前10000项

之前也写过输出斐波那契数的程序,当然也只是前几十位。所以也没注意到当输出大于47位之后 ,就发生溢出了。直到某一天,老师让我们输出47位之后的数我才发现这个问题。于是就花了一点时间写了出来。    ...
  • The_lastest
  • The_lastest
  • 2015年11月15日 16:16
  • 441
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NYOJ 461-Fibonacci数列(四)(求斐波那契数列前4位)
举报原因:
原因补充:

(最多只允许输入30个字)