#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
int len;
char c[500];
}Fib[1002];
void add(int x,int y)
{
int len1,len2,i,j,k;
len1=Fib[x].len;
len2=Fib[y].len;
for (i=0,j=0,k=0;i<len1;i++,j++)
{
Fib[x+1].c[k]=(Fib[x].c[i]-'0'+(j<len2?(Fib[y].c[j]-'0'):0))+'0';
k++;
}
for(i=0;i<k;i++)
if((Fib[x+1].c[i]-'0')>9)
{
if(Fib[x+1].c[i+1]==0)
Fib[x+1].c[i+1]=((Fib[x+1].c[i]-'0')/10)+'0';
else
Fib[x+1].c[i+1]=((Fib[x+1].c[i+1]-'0')+(Fib[x+1].c[i]-'0')/10)+'0';
Fib[x+1].c[i]=((Fib[x+1].c[i]-'0')%10)+'0';
}
if(Fib[x+1].c[len1]!=0)//两数相加最多进一位
Fib[x+1].len=len1+1;
else
Fib[x+1].len=len1;
}
int main()
{
int n,pi,i;
strcpy(Fib[1].c,"1");
Fib[1].len=1;
strcpy(Fib[2].c,"1");
Fib[2].len=1;
for(i=3;i<=1001;i++)
add(i-1,i-2);
scanf("%d",&n);
while(n--)
{
scanf("%d",&pi);
for(i=Fib[pi].len-1;i>=0;i--)
printf("%d",(Fib[pi].c[i]-'0'));
printf("\n");
}
return 0;
}hdu1715 大菲波数
最新推荐文章于 2018-05-29 21:02:34 发布

719

被折叠的 条评论
为什么被折叠?



