#include<stdio.h> #include<string.h> #define N 2004 void change(char c[],int n[]); int Sub(int *a,int *b,int lena,int lenb); int main() { char x[N],y[N]; int a[N]={0},b[N]={0}; scanf("%s %s",x,y); change(x,a); change(y,b); int lena=strlen(x); int lenb=strlen(y); int ans[N]={0}; if(lena<lenb) printf("0 "); else { int s=Sub(a,b,lena,lenb); if(s<0) printf("0 "); else if(s==0) printf("1 "); else { int i,j; lena=s; ans[0]++; int ntimes=lena-lenb; for(i=lena;i>=0;i--) if(i>=ntimes) b[i]=b[i-ntimes]; else b[i]=0; lenb=lena; for(j=0;j<=ntimes;j++) { int buffer; while(1) { buffer=Sub(a,b+j,lena,lenb-j); if(buffer<0) break; ans[ntimes-j]++; lena=buffer; } } for(i=0;i<=ntimes;i++) if(ans[i]>9) { ans[i+1]+=ans[i]/10; ans[i]=ans[i]%10; } for(i=ntimes;i>=0;i--) printf("%d",ans[i]); printf(" "); } } return 0; } void change(char c[],int n[]) { int i,j=0; for(i=strlen(c)-1;i>=0;i--) n[j++]=c[i]-'0'; } int Sub(int *a,int *b,int lena,int lenb) { int i,f=0; if(lena<lenb) return -1; else if(lenb==lena) { for(i=lena-1;i>=0;i--) { if(a[i]<b[i]) return -1; else if(a[i]>b[i]) break; } } for(i=0;i<lena;i++) { a[i]-=b[i]; if(a[i]<0) { a[i]+=10; a[i+1]--; } } for(i=lena-1;i>=0;i--) { if(a[i]!=0) return i+1; } return 0; }
因为是第一次写blog,代码没有给出注释,如果你在浏览时有什么疑问,请在下方留言。如果需要交流请直接给我发消息,若需转载请注明,谢谢!*^_^*