题意已经很清楚了,主要就是找递推式:
sum[i]=sum[i-1]+2*sum[i-2];
需要用到大数,不过这种普通的大数加法已经很熟了
#include<iostream> #include<algorithm> using namespace std; int sum[1010][100],len[1010]; void init() { sum[0][0]=0;len[0]=0; sum[1][0]=0;len[1]=0; sum[2][0]=1;len[2]=0; for(int i=3;i<=1000;i++) { int k,j; k=0; for(j=0;j<=len[i-2];j++) { int temp=sum[i-1][j]+sum[i-2][j]*2+k; k=temp/10000; sum[i][j]=temp%10000; } while(j<=len[i-1]) { int temp=sum[i-1][j]+k; k=temp/10000; sum[i][j]=temp%10000; j++; } if(k!=0) { sum[i][j]=k; len[i]=j; } else len[i]=j-1; } } int main() { init(); int n; while(scanf("%d",&n)==1) { int l=len[n]; printf("%d",sum[n][l]); for(int i=l-1;i>=0;i--) printf("%04d",sum[n][i]); printf("\n"); } return 0; }