zoukankan      html  css  js  c++  java
  • HDU 1250 Hat's Fibonacci

    Hat's Fibonacci

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 11104    Accepted Submission(s): 3732


    Problem Description
    A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1.
    F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4)
    Your task is to take a number as input, and print that Fibonacci number.
     

     

    Input
    Each line will contain an integers. Process to end of file.
     

     

    Output
    For each case, output the result in a line.
     

     

    Sample Input
    100
     

     

    Sample Output
    4203968145672990846840663646 Note: No generated Fibonacci number in excess of 2005 digits will be in the test data, ie. F(20) = 66526 has 5 digits.
     

     

    Author
    戴帽子的
    分析:这题用到大数相加,用数组的元素表示大数的各个数位的数字,(例如123,可以a[0]=3,a[1]=2,a[2]=1;)有个技巧是在网上学到的,每个数组元素存储八位数可以提高效率。先预处理,再输入数据。
    下面给出AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[10000][260]={0};   //每个元素可以存储8位数字,所以2005位可以用260个数组元素存储。
     4 int main()
     5 {
     6     int i,j,n;
     7     a[1][0]=1;      //赋初值
     8     a[2][0]=1;
     9     a[3][0]=1;
    10     a[4][0]=1;
    11     for(i=5;i<10000;i++)
    12     {
    13         for(j=0;j<260;j++)
    14             a[i][j]+=a[i-1][j]+a[i-2][j]+a[i-3][j]+a[i-4][j];
    15         for(j=0;j<260;j++)                //每八位考虑进位。
    16             if(a[i][j]>100000000)
    17             {
    18                 a[i][j+1]+=a[i][j]/100000000;
    19                 a[i][j]=a[i][j]%100000000;
    20             }
    21     }
    22     while(scanf("%d",&n)!=EOF)
    23     {
    24         for(j=259;j>=0;j--)
    25             if(a[n][j]!=0) break;      //不输出高位的0
    26         printf("%d",a[n][j]);
    27         for(j=j-1;j>=0;j--)
    28             printf("%08d",a[n][j]);     //每个元素存储了八位数字,所以控制输出位数为8,左边补0
    29         printf("
    ");
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    Flesch Reading Ease(模拟)
    实验一:词法分析设计
    java—容器学习笔记
    [转载]马士兵Java视频教程 —— 学习顺序
    Java的安装过程
    编程之美初赛第一场
    RCC 2014 Warmup (Div. 2)
    ural 1017. Staircases(dp)
    ural 1012. K-based Numbers. Version 2(大数dp)
    ural 1009. K-based Numbers(简单dp)
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6511047.html
Copyright © 2011-2022 走看看