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]); } }