本来想直接一个一个地减的~~~~
太耗时了。
1 #include<iostream> 2 #include<cstring> 3 int lena,lenb,lenc,lend,lene; 4 int comp(int d[],int b[]) 5 { 6 int len; 7 if(lend>lenb) len=lend; 8 else len=lenb; 9 while(len>=1&&d[len-1]==b[len-1]) len--; 10 if(len==0) return 0; 11 else return d[len-1]-b[len-1]; 12 } 13 void k(int d[]) 14 { 15 int i; 16 for(i=lend-1;i>=0;i--) 17 d[i+1]=d[i]; 18 d[0]=0; 19 lend++; 20 } 21 void chf(int d[],int b[],int e[]) 22 { 23 int i,j,len; 24 if(lend>lenb)len=lend; 25 else len=lenb; 26 for(i=0;i<len;i++) 27 { 28 e[i]+=d[i]-b[i]; 29 if(e[i]<0) 30 { 31 e[i+1]--; 32 e[i]+=10; 33 } 34 } 35 while(len>1&&e[len-1]==0)len--; 36 lene=len; 37 } 38 void ch(int a[],int b[],int c[],int d[]) 39 { 40 int e[1000]; 41 int i,j,len; 42 len=lena; 43 lend=0; 44 for(i=len-1;i>=0;i--) 45 { 46 k(d); 47 d[0]=a[i]; 48 while(comp(d,b)>=0) 49 { 50 memset(e,0,sizeof(e)); 51 chf(d,b,e); 52 memcpy(d,e,sizeof(e)); 53 lend=lene; 54 c[i]++; 55 } 56 } 57 while(len>1&&c[len-1]==0) len--; 58 lenc=len; 59 } 60 int main() 61 { 62 int i,j; 63 char sa[10001],sb[10001]; 64 int a[10001],b[10001],c[10001],d[10001]; 65 scanf("%s%s",sa,sb); 66 memset(c,0,sizeof(c)); 67 memset(a,0,sizeof(a)); 68 memset(b,0,sizeof(b)); 69 memset(d,0,sizeof(d)); 70 lena=strlen(sa); 71 lenb=strlen(sb); 72 for(j=0,i=lena-1;i>=0;i--) a[j++]=sa[i]-48; 73 for(j=0,i=lenb-1;i>=0;i--) b[j++]=sb[i]-48; 74 ch(a,b,c,d); 75 for(i=lenc-1;i>=0;i--) 76 printf("%d",c[i]); 77 printf("\n"); 78 for(i=lend-1;i>=0;i--) printf("%d",d[i]); 79 }
时间: 2024-11-08 21:36:14