標籤:
本來想直接一個一個地減的~~~~
太耗時了。
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 }View Code
高精度除法