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

hdu3117

时间:2015-08-13 14:23:41      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

链接:点击打开链接

题意:给出一个n,求斐波那契的前四位和后四位,并按照XXXX...XXXX的格式输出,如果不足八位直接全部输出

代码:

技术分享

#include <iostream>
#include <stdio.h>
#include <math.h>
#define Mod 10000
using namespace std;
long long f[100];
const int MAX=2;
typedef struct{
    long long m[MAX][MAX];
}Matrix;
Matrix P={0,1,1,1};
Matrix I={1,0,0,1};
Matrix matrixmul(Matrix a,Matrix b){
     int i,j,k;
     Matrix c;
     for(i=0;i<MAX;i++)
     for(j=0;j<MAX;j++){
        c.m[i][j]=0;
        for(k=0;k<MAX;k++)
        c.m[i][j]+=(a.m[i][k]*b.m[k][j])%Mod;
        c.m[i][j]%=Mod;
        }
        return c;
}                                           //矩阵乘法
Matrix quickpow(long long n){
    Matrix m=P,b=I;
    while(n>= 1){
        if(n&1)
        b=matrixmul(b,m);
        n=n>>1;
        m=matrixmul(m,m);
    }
    return b;
}                                           //矩阵快速幂
int main(){
    long long a[50],i,j,n,cur;
    double tp=(sqrt(5)+1)/2,t;
    Matrix temp;
    a[0]=0;a[1]=1;
    for(i=2;i<=39;i++){
        a[i]=a[i-1]+a[i-2];
//        cout<<a[i]<<endl;
    }
    while(scanf("%lld",&n)!=EOF){
        if(n<=39){
            cout<<a[n]<<endl;
            continue;
        }
        temp=quickpow(n);                   //前四位数推导公式:
        cur=temp.m[0][1];                   //s=d.xxx*10^(len-4)
        t=n*log10(tp)-0.5*log10(5.0);       //log10(s)=log10(d.xxxxx)+log10(10^(len-4))=log10(d.xxxx)+len-4
        t-=floor(t);                        //log10(s)+4-len=log10(d.xxxx)
        t+=3;                               //d.xxxx=10^(log10(s)+4-len)
        t=pow(10,t);                        //s=(1/sqrt(5))*[(1+sqrt(5))/2.0]^i
        while(t<1000)                       //len=(int)log10(s)+1
        t*=10;                              //d.xxxx=10^(log10(s)+4-((int)log10(s)+1))=10^(log10(s)-(int)log10(s)+3)
        printf("%lld...",(long long)t);
        printf("%04d\n",cur);               //用%04d输出后四位
    }
    return 0;
}




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

hdu3117

标签:

原文地址:http://blog.csdn.net/stay_accept/article/details/47611507

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