前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HDUOJ----1250 Hat's Fibonacci

HDUOJ----1250 Hat's Fibonacci

作者头像
Gxjun
发布2018-03-21 12:16:27
6070
发布2018-03-21 12:16:27
举报
文章被收录于专栏:mlml

Hat's Fibonacci

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

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

戴帽子的

Recommend

Ignatius.L

http://acm.hdu.edu.cn/showproblem.php?pid=1250

 大数题,我先是用打表的方法,发现数字到达7037的时候,数字规模才能达到2005 ...然后用7037*2005 ---->已经超过内存,所以这条路实不可取的。。。唯一的方法,只好暴力法,但又担心会超时,可是,喜感就是,竟然过了,还应458ms。。。。哎!!!。

贴下代码:

 1  1 #include<stdio.h>
 2  2 #include<string.h>
 3  3 #define maxn 2006    
 4  4 int a[maxn],b[maxn],c[maxn],d[maxn],ans[maxn];
 5  5 int main()
 6  6 {
 7  7     int i,j,e,s,up,num;
 8  8     while(scanf("%d",&num)!=EOF)
 9  9     {
10 10          if(num<=4)
11 11          printf("1");
12 12         else
13 13         {
14 14         memset(a,0,sizeof a);
15 15         memset(b,0,sizeof b);
16 16         memset(c,0,sizeof c);
17 17         memset(d,0,sizeof d);
18 18         memset(ans,0,sizeof ans);
19 19         a[0]=b[0]=c[0]=d[0]=1;
20 20      for(i=4,up=1;i<num;i++)
21 21      {
22 22         for(j=0,e=0;j<=up;j++)
23 23         {
24 24            s=a[j]+b[j]+c[j]+d[j]+e;
25 25            ans[j]=s%10;
26 26            e=(s-ans[j])/10;
27 27            if(s>9&&j==up) up++;
28 28            a[j]=b[j];
29 29            b[j]=c[j];
30 30            c[j]=d[j];
31 31            d[j]=ans[j];
32 32         }
33 33      }
34 34         for(j=maxn;ans[j]==0;j--);
35 35         for(i=j;i>=0;i--)
36 36         {
37 37          printf("%d",ans[i]);
38 38         }
39 39      }
40 40         printf("\n");
41 41     }
42 42 return 0;
43 43 }View Code 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-08-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hat's Fibonacci
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档