http://poj.org/problem?id=2506
#include<stdio.h>
#include<string.h>
int a[260],b[260];
char str[260][260];
void add()
{
int i,j,k;
str[0][0]='1';//不要忘了0,我就贡献了一次wa
str[0][1]='\0';
str[1][0]='1';
str[1][1]='\0';
str[2][0]='3';
str[2][1]='\0';
for(i=3;i<=260;i++)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int len1=strlen(str[i-2]);
for(k=len1-1,j=0;k>=0;k--,j++)
{
a[j]=str[i-2][k]-'0';
}
for(j=0;j<len1;j++)
{
a[j]=a[j]*2;
}
for(j=0;j<len1;j++)
{
a[j+1]+=a[j]/10;
a[j]=a[j]%10;
}
int len2=strlen(str[i-1]);
for(k=len2-1,j=0;k>=0;k--,j++)
{
b[j]=str[i-1][k]-'0';
}
for(j=0;j<=260;j++)
{
a[j]=a[j]+b[j];
}
for(j=0;j<=260;j++)
{
a[j+1]+=a[j]/10;
a[j]=a[j]%10;
}
for(j=260;j>=0;j--)
{
if(a[j]!=0)break;
}
for(k=0;j>=0;j--,k++)
{
str[i][k]='0'+a[j];
}
str[i][k]='\0';
}
}
int main()
{
int n;
add();
while(scanf("%d",&n)!=EOF)
{
printf("%s\n",str[n]);
}
}