hdu1316(菲波拉契数列)

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

#include<stdio.h>
#include<string.h>
long s[10000][200]={0};
char t[10000][200];
int main()
{
	char a[200],b[200];
	long i,j,n,m,count,k;
	s[1][0]=1;
	s[2][0]=2;
	k=0;
	for(i=3;i<10000;i++)
		for(j=0;j<200;j++)
		{
			k+=s[i-1][j]+s[i-2][j];
			s[i][j]=k%10;
			k/=10;
		}
	while(k&&j<200)
		{
			s[i][j++]=k%10;
			k/=10;
		}
	for(i=10000-1;i>=1;i--)
	{
		k=0;
		for(j=200-1;j>=0;j--)
			if(s[i][j]!=0)
				break;
		for(;j>=0;j--)
				t[i][k++]=s[i][j]+48;
		t[i][k]='\0';
	}
	while(scanf("%s%s",a,b)>0)
	{
		count=0;
		n=strlen(a);
		m=strlen(b);
		if(a[0]=='0'&&b[0]=='0')
			break;
		for(i=1;strlen(t[i])<n;i++);
		while(1)
		{
			if(strlen(t[i])==n)
			{
				if(strcmp(t[i],a)<0)
					i++;
				else
					break;
			}
			else
				break;
		}
		for(;i<10000;i++)
		{
			if(strlen(t[i])<m)
				count++;
			else
				if(strlen(t[i])==m)
				{
					if(strcmp(t[i],b)<=0)
						count++;
					else
						break;
				}
				else
					break;
		}
		printf("%ld\n",count);
	}
	return 0;
}

 

posted @ 2012-11-23 13:20  紫忆  阅读(206)  评论(0编辑  收藏  举报