大整数除法.docx

上传人:b****5 文档编号:3527355 上传时间:2022-11-23 格式:DOCX 页数:15 大小:16.30KB
下载 相关 举报
大整数除法.docx_第1页
第1页 / 共15页
大整数除法.docx_第2页
第2页 / 共15页
大整数除法.docx_第3页
第3页 / 共15页
大整数除法.docx_第4页
第4页 / 共15页
大整数除法.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

大整数除法.docx

《大整数除法.docx》由会员分享,可在线阅读,更多相关《大整数除法.docx(15页珍藏版)》请在冰豆网上搜索。

大整数除法.docx

大整数除法

大整数除法.txt我不奢望什么,只希望你以后的女人一个不如一个。

真怀念小时候啊,天热的时候我也可以像男人一样光膀子!

#include

#include

usingnamespacestd;

constintmaxsize=1000;

classCbigint

...{

private:

charm_int[maxsize];

intlength;

public:

Cbigint(char*p=NULL);

Cbigint(constCbigint&c);

Cbigint:

:

Cbigint(longn);

voidsinmult(intoffset,charstr1,constchar*str2,intn,char*dest);//一位乘法,供多位乘法调用

voidmult(constchar*str1,constchar*str2,intn1,intn2,char*dest);//乘法实现主程序

voidsub(constchar*str1,intn1,constchar*str2,intn2,char*dest);//减法实现主程序

voidsum(constchar*str1,intn1,constchar*str2,intn2,char*dest);//加法实现主程序

Cbigintabs()const;//返回绝对值

friendostream&operator<<(ostream&dirt,Cbigint&iv);//输出

friendistream&operator>>(istream&dirt,Cbigint&iv);//输入

CbigintCbigint:

:

operator=(Cbigintn);//重载等号

booloperator>(constCbigint&n);

booloperator<(constCbigint&n);

booloperator==(constCbigint&n);

Cbigintoperator-(constCbigint&n);

Cbigintoperator-(longn);

Cbigintoperator-()const;//重载负号

Cbigintoperator+(constCbigint&n);

Cbigintoperator+(longn);

Cbigintoperator*(longn);

Cbigintoperator*(constCbigint&n);

Cbigintoperator/(longn);

Cbigintoperator/(constCbigint&n);

stringtoString();//转化为字条串

voidinit(char*p);//用字串初始化

};

//bigint.cpp

#include"bigint.h"

Cbigint:

:

Cbigint(char*p)

...{

if(p==NULL)

...{

for(inti=1;i

m_int[i]=0;

m_int[0]='+';

length=1;

}

else

...{

length=strlen(p);

inti=0;

if(p[0]!

='-')

...{

for(i=1;i<=length;i++)

m_int[i]=p[i-1]-48;

m_int[0]='+';

}

else

...{

for(i=1;i

m_int[i]=p[i]-48;

m_int[0]='-';

length--;

}

for(i;i

...{

m_int[i]=0;

}

}

}

Cbigint:

:

Cbigint(longn)

...{

longj=0,m=n;

while((m/10)!

=0)

...{

j++;

m=m/10;

}

length=j+1;

while((n/10)!

=0)

...{

m_int[j+1]=n%10;

j--;

n=n/10;

}

m_int[1]=n;

if(n>=0)

m_int[0]='+';

else

m_int[0]='-';

}

voidCbigint:

:

init(char*p)

...{

length=strlen(p);

inti=1;

if(p[0]!

='-')

...{

for(i=1;i<=length;i++)

m_int[i]=p[i-1]-48;

m_int[0]='+';

}

else

...{

for(i=1;i<=length;i++)

m_int[i]=p[i]-48;

m_int[0]='-';

length--;

}

for(i;i

m_int[i]=0;

}

Cbigint:

:

Cbigint(constCbigint&c)

...{

for(inti=0;i<=c.length;i++)

m_int[i]=c.m_int[i];

length=c.length;

}

stringCbigint:

:

toString()

{

stringstr(length+1,'\0');

if(m_int[0]=='+')

{

for(intj=0;j

str[j]=m_int[j+1]+48;

}

else

{

for(intj=1;j<=length;j++)

str[j]=m_int[j]+48;

str[0]='-';

}

returnstr;

}

voidCbigint:

:

sinmult(intoffset,charstr1,constchar*str2,intn,char*dest)//一位的整数str1(0-9)与str2相乘把结果把到dest的offset位上

{

intinc=0,i,x;

i=n-1;

while(i>=0)

{

x=str2[i]*str1+inc+dest[offset];

dest[offset]=x%10;

inc=x/10;

i--;

offset++;

}

while(inc)

{

x=dest[offset]+inc;

dest[offset]=x%10;

inc=x/10;

offset++;

}

}

voidCbigint:

:

mult(constchar*str1,constchar*str2,intn1,intn2,char*dest)

{

inti=n1-1;

while(i>=0)

{

sinmult(n1-i-1,str1[i],str2,n2,dest);

i--;

}

}

CbigintCbigint:

:

operator*(constCbigint&n)

{

Cbiginttemp;

chardest[maxsize]={0};

inti=0,j=0;

mult(m_int+1,n.m_int+1,length,n.length,dest);

for(i=maxsize-1;i>=0;i--)

if(dest[i]!

=0)

break;

temp.length=i+1;

for(j=0;j<=i;j++)

temp.m_int[j+1]=dest[i-j];

if(m_int[0]!

=n.m_int[0])

temp.m_int[0]='-';

else

temp.m_int[0]='+';

returntemp;

}

CbigintCbigint:

:

operator/(constCbigint&n)

{

Cbigintdiv1=abs(),div2=n.abs(),result;

intflag=0;

if(m_int[0]==n.m_int[0])

flag='+';

else

flag='-';

if(div1

{

result.m_int[0]='+';

result.m_int[1]=0;

result.length=1;

returnresult;

}

result.m_int[0]=flag;

if(div1==div2)

{

result.m_int[0]=flag;

result.m_int[1]=1;

result.length=1;

returnresult;

}

intlen1=div1.length,len2=div2.length,len3,temp=0;

inti=1;

for(i=1;i<=len2;i++)

{

if(div1.m_int[i]>div2.m_int[i])

{

result.length=len1-len2+1;

break;

}

if(div1.m_int[i]

{

result.length=len1-len2;

break;

}

}

if(i>len2)

result.length=len1-len2+1;

len3=result.length;

while(div1>div2||div1==div2)

{

for(i=1;i<=len2;i++)

{

if(div1.m_int[i]>div2.m_int[i])

{

temp=len1-len2+1;

break;

}

if(div1.m_int[i]

{

temp=len1-len2;

break;

}

}

if(i>len2)

temp=len1-len2+1;

result.m_int[len3-temp+1]=result.m_int[len3-temp+1]+1;

div2.length=div2.length+temp-1;

div1=div1-div2;

div2.length=len2;

len1=div1.length;

}

returnresult;

}

CbigintCbigint:

:

operator/(longn)

{

return(*this)/Cbigint(n);

}

CbigintCbigint:

:

operator=(constCbigintn)

{

for(inti=0;i<=n.length;i++)

m_int[i]=n.m_int[i];

for(inti=n.length+1;i<=length;i++)

m_int[i]=0;

length=n.length;

returnn;

}

CbigintCbigint:

:

operator*(longn)

{

return(*this)*Cbigint(n);

}

CbigintCbigint:

:

operator+(longn)

{

return*this+Cbigint(n);

}

boolCbigint:

:

operator>(constCbigint&n)

{

if(m_int[0]>n.m_int[0])

returntrue;

if(m_int[0]

returnfalse;

if(m_int[0]=='+')

{

if(length>n.length)

returntrue;

if(length

returnfalse;

for(inti=1;i<=length;i++)

{

if(m_int[i]>n.m_int[i])

returntrue;

if(m_int[i]

returnfalse;

}

returnfalse;

}

else

{

if(length>n.length)

returnfalse;

if(length

returntrue;

for(inti=1;i<=length;i++)

{

if(m_int[i]>n.m_int[i])

returnfalse;

if(m_int[i]

returntrue;

}

returnfalse;

}

}

boolCbigint:

:

operator==(constCbigint&n)

{

if(length!

=n.length)

returnfalse;

for(inti=0;i<=length;i++)

if(m_int[i]!

=n.m_int[i])

returnfalse;

returntrue;

}

boolCbigint:

:

operator<(constCbigint&n)

{

if(*this>n||*this==n)

returnfalse;

else

returntrue;

}

CbigintCbigint:

:

operator+(constCbigint&n)

{

Cbiginttemp;

chardest[maxsize]={0};

charflag='+';

inti=0;

if(m_int[0]==n.m_int[0])

{

flag=m_int[0];

if(*this

sum(m_int+1,length,n.m_int+1,n.length,dest);

else

sum(n.m_int+1,n.length,m_int+1,length,dest);

}

else

{

if(abs()==n.abs())

{

temp.length=1;

temp.m_int[0]='+';

temp.m_int[1]=0;

returntemp;

}

if(abs()>n.abs())

{

flag=m_int[0];

sub(m_int+1,length,n.m_int+1,n.length,dest);

}

else

{

flag=n.m_int[0];

sub(n.m_int+1,n.length,m_int+1,length,dest);

}

}

for(i=maxsize-1;i>=0;i--)

if(dest[i]!

=0)

break;

for(intj=0;j<=i;j++)

temp.m_int[j+1]=dest[i-j];

temp.length=i+1;

temp.m_int[0]=flag;

returntemp;

}

CbigintCbigint:

:

operator-(constCbigint&n)

{

return*this+(-n);

}

CbigintCbigint:

:

operator-(longn)

{

return*this+Cbigint(-n);

}

voidCbigint:

:

sum(constchar*str1,intn1,constchar*str2,intn2,char*dest)

{

intinc=0,x=0;

intm=0;

while(n1-->0)

{

n2--;

x=str1[n1]+str2[n2]+inc;

dest[m++]=x%10;

inc=x/10;

}

while(n2-->0)

{

x=str2[n2]+inc;

dest[m++]=x%10;

inc=x/10;

}

dest[m]=inc;

}

CbigintCbigint:

:

operator-()const

{

Cbiginttemp=*this;

if(temp.m_int[0]=='+')

temp.m_int[0]='-';

else

temp.m_int[0]='+';

returntemp;

}

voidCbigint:

:

sub(constchar*str1,intn1,constchar*str2,intn2,char*dest)

{

intm=0,x=0,inc=0;

m=0;

while(n2-->0)

{

n1--;

x=str1[n1]-str2[n2]-inc;

if(x<0)

{

x+=10;

inc=1;

}

else

inc=0;

dest[m++]=x%10;

}

while(n1-->0)

{

x=str1[n1]-inc;

if(x<0)

{

inc=1;

x+=10;

}

dest[m]=x%10;

m++;

}

}

CbigintCbigint:

:

abs()const

{

Cbiginttemp(*this);

temp.m_int[0]='+';

returntemp;

}

ostream&operator<<(ostream&dirt,Cbigint&iv)

{

returndirt<

}

istream&operator>>(istream&dirt,Cbigint&iv)

{

chartemp[1000];

dirt>>temp;

iv.init(temp);

returndirt;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1