/*zoj 1962 大数斐波那契数列..... * * * */ #include <stdio.h> #include <string.h> #define SIZE 500 int f[SIZE+1][SIZE+1]; int main(void) { //freopen("in.txt","r",stdin); //freopen("zjy.txt","w",stdout); int compare(int a[],int k); int i,j,m; memset(f,0,sizeof(f)); f[0][0] = 1; f[1][0] =2; for(i=2;i<SIZE;i++) //倒序 { for(j=0;j<SIZE;j++) { f[i][j] = f[i-1][j]+f[i-2][j]+f[i][j]; if(f[i][j]>9) { f[i][j]-=10; f[i][j+1]++; } } } char aa[SIZE+1],bb[SIZE+1]; int a[SIZE+1],b[SIZE+1]; while(scanf("%s%s",aa,bb) != EOF) { if(aa[0]=='0'&&bb[0]=='0') break; int len1= strlen(aa),len2 = strlen(bb); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(i=0;i<len1;i++) a[i]=aa[len1-1-i]-'0'; for(i=0;i<len2;i++) b[i]=bb[len2-1-i]-'0'; i=0; int count=0; while(compare(a,i) == 1) i++; while(compare(b,i)>=0) { i++; count++; } printf("%d/n",count); } return 0; } int compare(int a[],int k) { int weishua=0,weishub=0; int i; for(weishua=SIZE;weishua>=0&&a[weishua]== 0;weishua--) ; for(weishub=SIZE;weishub>=0&&f[k][weishub]==0;weishub--) ; if(weishua>weishub) return 1; if(weishua<weishub) return -1; for(i=weishua;i>=0;i--) if(a[i]>f[k][i]) return 1; else if(a[i]<f[k][i]) return -1; return 0; } 貌似测试数据中含有0; 其他不知道... 写的很菜很垃圾.....效率很低,不管了,管他呢,反正暂时过了,呵呵