注意边界条件 #include<stdio.h> #include<string.h> #define N 111 int cmp(int s[],int t[]) { int i; for(i=N-1;i>=0;i--) { if(s[i]>t[i]) return 1; else if(s[i]<t[i]) return -1; } return 0; } int main() { int count,i,j,len,f0[N],f1[N],f2[N],s[N],t[N]; char a[N],b[N]; while(scanf("%s%s",a,b)) { if(strcmp(a,"0")==0&&strcmp(b,"0")==0) return 0; count=0; memset(s,0,sizeof(s)); memset(t,0,sizeof(t)); memset(f0,0,sizeof(f0)); memset(f1,0,sizeof(f1)); memset(f2,0,sizeof(f2)); len=strlen(a); for(i=0;i<len;i++) s[len-i-1]=a[i]-'0'; len=strlen(b); for(i=0;i<len;i++) t[len-i-1]=b[i]-'0'; f0[0]=1;f1[0]=1;f2[0]=1; while(cmp(f2,t)<=0) { if(cmp(f2,s)>=0) count++; for(i=0;i<N;i++) f2[i]=f1[i]+f0[i]; for(i=0;i<N;i++) if(f2[i]>9) { f2[i]-=10; f2[i+1]++; } for(i=0;i<N;i++) { f0[i]=f1[i]; f1[i]=f2[i]; } } printf("%d/n",count); } }