hdu 1250



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.
 
解题分析:从给出的NOTE来看,最大的位数有2005位,而且次数是小于10000的,但是对于这样二维数组10010*300,比这个还有大的话,将会超内存。
     比较经典的就是,抛弃以往的满十近一;最大为2005,大约是300的7倍,因此可以采用满10000000进一。同时要注意的是,在结尾输出的时候,要注意将这个7位数全部输出,比方说,其中一个数12345,并不够7位,但是它输出0012345;还有一点就是,临结尾是的进位要单独输出,因为进位是一个数据。

#include<stdio.h>
#include<string.h>
int  p[10100][300];
 int main()
   {
   	 int i,j;
   	 int n,k;
   	 int jinwei;
   	 int temp;
   	 int len,m; 
   	 
   	 while(scanf("%d",&n)!=EOF)
   	   {
   	   	  memset(p,0,sizeof(p));
   	      p[1][0]=1;
   	      p[2][0]=1;
   	      p[3][0]=1;
		  p[4][0]=1; 
		  len=1;
		 for(i=5;i<=n;i++)
		   {
		   	 	jinwei=0;
		   	   for(j=0;j<=len;j++)
		   	      {
		   	      	  temp=p[i-1][j]+p[i-2][j]+p[i-3][j]+p[i-4][j]+jinwei;
		   	      	  jinwei=temp/10000000;
		   	      	  p[i][j]=temp%10000000;
		   	      	  
					if(j==len&&jinwei!=0)  len++;
		   	      }

		   }
		   //len=299;
		   while(p[n][len]==0)  len--;
		    printf("%d",p[n][len]);
		     for(--len;len>=0;len--)
		       printf("%07d",p[n][len]); 
		    printf("\n");
   	   }
   	return 0;
   } 


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.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值