http://acm.hdu.edu.cn/showproblem.php?pid=1865
这个的递推公式为a[i]=a[i-1]+a[i-2]。
唯一要注意的就是后面数据存不下,要用数组来存大数。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int t,n,i,j,x,y;
char a[210];
int b[210][20];
memset(b,0,sizeof(b));
b[1][0] =b[2][0] = b[1][1] = 1;
b[2][1] = 2;
for(i = 3; i <= 200; i++)
{
j = 1;
y = x = 0;
while(1)
{
x = (b[i-1][j] + b[i-2][j] + y)%10000;
y = (b[i-1][j] + b[i-2][j] + y)/10000;//是否有进位
b[i][j] = x;
// printf("i:%d %d %d %d\n",i,x,y,b[i][j]);
// getchar();
if(j == b[i-1][0] && y==0)
{
b[i][0] = j;
break;
}
if(j == b[i-1][0] && y!=0)
{
j++;
b[i][0] = j;
b[i][j] = y;
break;
}
j++;
}
}
scanf("%d",&t);
while(t--)
{
scanf("%s",&a);
n = strlen(a);
// scanf("%d",&n);
i = b[n][0];
printf("%d",b[n][i]);
i--;
for( ; i > 0; i--)
{
printf("%04d",b[n][i]);
}
printf("\n");
}
return 0;
}