大数问题。。关键在找规律,00的个数等于上一级中01的个数,而01的个数等于上一级中1和00出现次数的和。可用二维数组A,B打表分别记录第n次1和01的出现的次数(00个数等于第n-1次01的个数,故不用再用另一数组
#include<stdio.h>
#include<string.h>
int A[1010][510],B[1010][510];
int main(){
int i,j,c,d,n;
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
A[1][0]=1;
A[2][0]=2;
B[1][0]=1;
B[2][0]=1;
for(i=3;i<=1000;i++){
c=0;
d=0;
for(j=0;j<=500;j++){
A[i][j]=A[i-1][j]*2+c;
c=A[i][j]/10;
A[i][j]%=10;
B[i][j]=A[i-1][j]+B[i-2][j]+d;
d=B[i][j]/10;
B[i][j]%=10;
}
}
while(scanf("%d",&n)!=EOF){
if(n==1) printf("0");
else{
for(i=500;i>=0;i--){
if(B[n-1][i]){
j=i;
break;
}
}
for(i=j;i>=0;i--)printf("%d",B[n-1][i]);
}
printf("\n");
}
return 0;
}
C保存)