刚开始一直re,高精度的时候要注意,f[n]=f[n-1]+2*f[n-2];数组要开到350才够
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 #define max(x,y) x>y?x:y 4 char s[350][105]={"1","1"}; 5 int t1[105]; 6 void add(int n1,int n2) 7 { 8 int len1=strlen(s[n1]); 9 int len2=strlen(s[n2]); 10 int lenmax=max(len1,len2); 11 t1[0]=0; 12 t1[1]=0; 13 int i,j,k; 14 lenmax++; 15 for(i=len1-1,j=len2-1,k=lenmax;i>=0&&j>=0;i--,j--,k--) 16 t1[k]=s[n1][i]-'0'+2*(s[n2][j]-'0'); 17 if(j<0) 18 { 19 while(i>=0) 20 { 21 t1[k]=s[n1][i]-'0'; 22 i--; 23 k--; 24 } 25 } 26 for(k=lenmax;k>=1;k--) 27 { 28 t1[k-1]+=(t1[k]/10); 29 t1[k]%=10; 30 } 31 if(t1[0]) 32 { 33 for(i=0;i<=lenmax;i++) 34 s[n1+1][i]=t1[i]+'0'; 35 s[n1+1][lenmax+1]='\0'; 36 } 37 else 38 { 39 if(t1[1]) 40 { 41 for(i=1;i<=lenmax;i++) 42 s[n1+1][i-1]=t1[i]+'0'; 43 s[n1+1][lenmax]='\0'; 44 } 45 else if(t1[2]) 46 { 47 for(i=2;i<=lenmax;i++) 48 s[n1+1][i-2]=t1[i]+'0'; 49 s[n1+1][lenmax-1]='\0'; 50 } 51 } 52 } 53 int main() 54 { 55 int n; 56 int i,j,k; 57 for(i=1;i<=340;i++) 58 add(i,i-1); 59 while(scanf("%d",&n)!=EOF) 60 { 61 printf("%s\n",s[n]); 62 } 63 return 0; 64 }