zoj 1962 How Many Fibs?(字符串化为数字处理)
事实证明还是,题目拿到手之后,还是还是好好动手划一下比较好,不然直接想打哪!打到哪!很容易乱掉的。将数字倒着弄成字符串比较好处理。
#include<stdio.h> #include<string.h> #define MAX 505 char str[MAX][200]; int ch1(char *a,char *b) { int l1,len,flag,coun=0,l2; int i=0,j=0; l1=strlen(a); l2=strlen(b); if(l1>l2) return 1; else if(l1<l2) return 0; else { for(i=l1-1;i>=0;i--) { if(a[i]>b[i]) return 1; else if(a[i]<b[i]) return 0; } return 1; } } int ch2(char *a,char *b) { int l1,len,flag,coun=0,l2; int i=0,j=0; l1=strlen(a); l2=strlen(b); if(l1>l2) return 1; else if(l1<l2) return 0; else { for(i=l1-1;i>=0;i--) { if(a[i]>b[i]) return 1; else if(a[i]<b[i]) return 0; } return 0; } } int cmp(char *str1,char *str2) { int i,coun=0,s=0; for(i=0;i<MAX;i++) { if(ch2(str[i],str2)) break; if(ch1(str[i],str1)) { coun++; } } return coun; } int main(void) { int i,j,len,h,flag,len1,l1,l2,k; char str1[100],str2[100],str3[100],str4[100]; str[0][0]='1';str[0][1]='\0'; str[1][0]='2';str[1][1]='\0'; for(i=2;i<MAX;i++) { len=strlen(str[i-1]); len1=strlen(str[i-2]); flag=0; for(j=0;j<len;j++) { h=0; l1=str[i-1][j]-'0'; l2=str[i-2][j]-'0'; if(j>=len1) l2=0; if(flag==1) h=1; h+=l1+l2; if(h>=10) { flag=1; h-=10; } else flag=0; str[i][j]='0'+h; } if(flag==1) str[i][j++]='1'; str[i][j]='\0'; } while(scanf("%s%s",str1,str2)!=EOF) { if(strcmp(str1,"0")==0&&strcmp(str2,"0")==0) break; l1=strlen(str1);str3[l1]='\0'; for(i=l1-1,j=0;i>=0;i--) str3[i]=str1[j++]; l2=strlen(str2);str4[l2]='\0'; for(i=l2-1,j=0;i>=0;i--) str4[i]=str2[j++]; printf("%d\n",cmp(str3,str4)); } return 0; }