http://poj.grids.cn/problem/2737/ 这道题 判断数的大小部分。。由于想得太简单了。。所以一开始就写错了 最后还是ac了 题目基本简单。。但复杂。。 #include<iostream> using namespace std; int len1,len2; bool sub(int a1[],int a2[],int len) { int i=len-1; if(len==len1)//判断被除数与除数的大小 { for(int i=len-1;i>=0;i--) { if(a1[i]>a2[i]) break; else if(a1[i]<a2[i]) return 0; } } else if(len1<len) return 0; for(int i=0;i<len1;i++) { a1[i]-=a2[i]; if(a1[i]<0) { a1[i+1]--; a1[i]+=10; } } while(a1[len1-1]==0&&len1>=1) len1--; return 1; } int main() { char s1[210],s2[210]; int n; cin>>n; while(n--) { cin>>s1>>s2; int result[200]={0}; len1=strlen(s1); len2=strlen(s2); int dif=len1-len2; if(dif<0) cout<<0; else { int a[200]={0},b[200]={0}; for(int i=0;i<len1;i++) a[i]=s1[len1-i-1]-'0'; for(int i=dif,j=len2-1;j>=0;i++,j--) b[i]=s2[j]-'0'; int i=0; while(i<=dif)//依次减去 除数的 10^dif--0; { if(sub(a,b+i,len2+dif-i)) { result[dif-i]+=1; } else { i++; } } for(int i=0;i<200;i++) { if(result[i]>9) { result[i+1]+=result[i]/10; result[i]%=10; } } i=199; while(result[i]==0) i--; if(i<0) cout<<0; else while(i>=0) cout<<result[i--]; } cout<<endl; } return 0; }