int CPublic::LarNumDivision(int a[],int b[],int c[],int e[],int m,int n,int *p) //a是被除数,b是除数,c余数,e商
{ //m是a的位数,n是b的位数,返回c的位数,*p记录e的位数
int i,i1,j,j1,l,k,k1=0;
int n1;
int d[MAX]={0},f[MAX]={0};
l=CPublic::LarNumCompare(a,b,m,n);
if(l<0)
{
e[0]=0;
*p=1;
for(i=0;i<m;i++)
c[i]=a[i];
return m;
}
else if(l==0)
{
e[0]=1;
*p=1;
c[0]=0;
return 1;
}
else
{
for(i=0;i<n;i++)
d[i]=a[i];
i--;
i1=i;
n1=n;
l=CPublic::LarNumCompare(d,b,n1,n);
if(l<0)
{
i++;
if(i<m)
{
d[i]=a[i];
n1=i+1;
}
while(i<m)
{
while(CPublic::LarNumCompare(d,b,n1,n)>=0)
{
k=CPublic::LarNumMinus(d,b,c,n1,n);
f[k1]++;
for(j=0;j<MAX;j++)
d[j]=0;
for(j=0;j<k;j++)
d[j]=c[j];
n1=k;
}
if(CPublic::LarNumCompare(d,b,n1,n)<0)
{
for(j1=0;j1<n1;j1++)
c[j1]=d[j1];
}
if(d[0]==0)
i1=n1-1;
if(d[0]!=0)
i1=n1;
i++;
if(i<m)
{
d[i1]=a[i];
n1=i1+1;
}
k1++;
}
for(i=0;i<k1;i++)
e[i]=f[i];
*p=k1;
return k;
}
if(l>=0)
{
while(i<m)
{
while(CPublic::LarNumCompare(d,b,n1,n)>=0)
{
k=CPublic::LarNumMinus(d,b,c,n1,n);
f[k1]++;
for(j=0;j<MAX;j++)
d[j]=0;
for(j=0;j<k;j++)
d[j]=c[j];
n1=k;
}
if(CPublic::LarNumCompare(d,b,n1,n)<0)
{
for(j1=0;j1<n1;j1++)
c[j1]=d[j1];
}
if(d[0]==0)
i1=n1-1;
if(d[0]!=0)
i1=n1;
i++;
if(i<m)
{
d[i1]=a[i];
n1=i1+1;
}
k1++;
}
for(i=0;i<k1;i++) //由于商本来就是从最高位开始求取,所以此处不用反方向赋值
e[i]=f[i];
*p=k1;
return k;
}
}
return 1;
}
{ //m是a的位数,n是b的位数,返回c的位数,*p记录e的位数
int i,i1,j,j1,l,k,k1=0;
int n1;
int d[MAX]={0},f[MAX]={0};
l=CPublic::LarNumCompare(a,b,m,n);
if(l<0)
{
e[0]=0;
*p=1;
for(i=0;i<m;i++)
c[i]=a[i];
return m;
}
else if(l==0)
{
e[0]=1;
*p=1;
c[0]=0;
return 1;
}
else
{
for(i=0;i<n;i++)
d[i]=a[i];
i--;
i1=i;
n1=n;
l=CPublic::LarNumCompare(d,b,n1,n);
if(l<0)
{
i++;
if(i<m)
{
d[i]=a[i];
n1=i+1;
}
while(i<m)
{
while(CPublic::LarNumCompare(d,b,n1,n)>=0)
{
k=CPublic::LarNumMinus(d,b,c,n1,n);
f[k1]++;
for(j=0;j<MAX;j++)
d[j]=0;
for(j=0;j<k;j++)
d[j]=c[j];
n1=k;
}
if(CPublic::LarNumCompare(d,b,n1,n)<0)
{
for(j1=0;j1<n1;j1++)
c[j1]=d[j1];
}
if(d[0]==0)
i1=n1-1;
if(d[0]!=0)
i1=n1;
i++;
if(i<m)
{
d[i1]=a[i];
n1=i1+1;
}
k1++;
}
for(i=0;i<k1;i++)
e[i]=f[i];
*p=k1;
return k;
}
if(l>=0)
{
while(i<m)
{
while(CPublic::LarNumCompare(d,b,n1,n)>=0)
{
k=CPublic::LarNumMinus(d,b,c,n1,n);
f[k1]++;
for(j=0;j<MAX;j++)
d[j]=0;
for(j=0;j<k;j++)
d[j]=c[j];
n1=k;
}
if(CPublic::LarNumCompare(d,b,n1,n)<0)
{
for(j1=0;j1<n1;j1++)
c[j1]=d[j1];
}
if(d[0]==0)
i1=n1-1;
if(d[0]!=0)
i1=n1;
i++;
if(i<m)
{
d[i1]=a[i];
n1=i1+1;
}
k1++;
}
for(i=0;i<k1;i++) //由于商本来就是从最高位开始求取,所以此处不用反方向赋值
e[i]=f[i];
*p=k1;
return k;
}
}
return 1;
}