![程序設(shè)計教程機械工業(yè)出版社課后習(xí)題答案第章操作符重載_第1頁](http://file4.renrendoc.com/view/f9643f9b36fb78971b090b988c7c84a2/f9643f9b36fb78971b090b988c7c84a21.gif)
![程序設(shè)計教程機械工業(yè)出版社課后習(xí)題答案第章操作符重載_第2頁](http://file4.renrendoc.com/view/f9643f9b36fb78971b090b988c7c84a2/f9643f9b36fb78971b090b988c7c84a22.gif)
![程序設(shè)計教程機械工業(yè)出版社課后習(xí)題答案第章操作符重載_第3頁](http://file4.renrendoc.com/view/f9643f9b36fb78971b090b988c7c84a2/f9643f9b36fb78971b090b988c7c84a23.gif)
![程序設(shè)計教程機械工業(yè)出版社課后習(xí)題答案第章操作符重載_第4頁](http://file4.renrendoc.com/view/f9643f9b36fb78971b090b988c7c84a2/f9643f9b36fb78971b090b988c7c84a24.gif)
![程序設(shè)計教程機械工業(yè)出版社課后習(xí)題答案第章操作符重載_第5頁](http://file4.renrendoc.com/view/f9643f9b36fb78971b090b988c7c84a2/f9643f9b36fb78971b090b988c7c84a25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第7章操作符重載答:通過對C++操作符進行重載,我們可以實現(xiàn)用C++的操作符按照通常的習(xí)慣來對某些類(特別是一些數(shù)學(xué)類)的對象進行操作,從而使得程序更容易理解。除此之外,操作符重載機制也提高了C++語言的靈活性和可擴充性,它使得C++操作符除了能對基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型進行操作外,也能用它們來對類的對象進行操作。操作符重載的形式有哪兩種形式?這兩種形式有什么區(qū)別?答:一種就是作為成員函數(shù)重載操作符;另一種就是作為全局(友元)函數(shù)重載操作符。當(dāng)操作符作為類的非靜態(tài)成員函數(shù)來重載時,由于成員函數(shù)已經(jīng)有一個隱藏的參數(shù)this,因此對于雙目操作符重載函數(shù)只需要提供一個參數(shù),對于單目操作符重載函數(shù)則不需提供參數(shù)。當(dāng)操作符作為全局函數(shù)來重載時,操作符重載函數(shù)的參數(shù)類型至少有一個為類、結(jié)構(gòu)、枚舉或它們的引用類型。而且如果要訪問參數(shù)類的私有成員,還需要把該函數(shù)說明成相應(yīng)類的友元。對于雙目操作符重載函數(shù)需要兩個參數(shù),對于單目操作符重載函數(shù)則需要給出一個參數(shù)。操作符=、()、[]以及->不能作為全局函數(shù)來重載。另外,作為類成員函數(shù)來重載時,操作符的第一個操作數(shù)必須是類的對象,全局函數(shù)重載則否。若干秒(+=、-=)、時間增加/減少一秒(++、--)以及兩個時間相差的秒數(shù)(-)。classTime{private:inthour,minute,second;public:Time(){hour=minute=second=0;}Time(inth){hour=h;minute=second=0;}Time(inth,intm){hour=h;minute=m;second=0;}Time(inth,intm,ints){hour=h;minute=m;second=s;}Time(constTime&t){}hour=t.hour;minute=t.minute;second=t.second;booloperator==(Time&t){if(hour==t.hour&&minute==t.minute&&second==t.second)returntrue;returnfalse;}booloperator!=(Time&t){return!(*this==t);}booloperator>(Time&t){if(hour>t.hour)returntrue;elseif(hour==t.hour&&minute>t.minute)returntrue;elseif(hour==t.hour&&minute==t.minute&&second>t.second)returntrue;elsereturnfalse;}booloperator>=(Time&t){return*this>t||*this==t;}booloperator<(Time&t){return!(*this>=t);}booloperator<=(Time&t){return!(*this>t);}Time&operator+=(ints){second+=s;while(second>=60){second-=60;minute++;}while(minute>=60){minute-=60;hour++;}while(hour>=24)hour-=24;return*this;}Time&operator-=(ints){}second-=s;while(second<0){second+=60;minute--;}while(minute<0){minute+=60;hour--;}while(hour<0)hour+=24;return*this;Timeoperator對Timet,操作為:++t{*this+=1;return*this;}Timeoperator++(int)//對Timet,操作為:t++{Timet=*this;*this+=1;returnt;}Time&operator--(){*this-=1;return*this;}Timeoperator--(int){Timet=*this;*this-=1;returnt;}intoperator-(Time&t){//把時間直接換算成秒數(shù)計算intsec1=hour*3600+minute*60+second;intsec2=t.hour*3600+t.minute*60+t.second;returnsec2-sec1;}利用操作符重載給出一個完整的復(fù)數(shù)類的定義。classComplex{private:doublereal,imag;public:Complex(){real=imag=0;}Complex(doubler){}real=r;imag=0;Complex(doubler,doublei){}real=r;imag=i;Complex(constComplex&c){}real=c.real;imag=c.imag;doublemodulus()const{returnreal*real+imag*imag;}Complexoperator-()const{Complextemp;temp.real=-real;temp.imag=-imag;returntemp;}friendbooloperator==(constComplex&c1,constComplex&c2);friendbooloperator!=(constComplex&c1,constComplex&c2);friendbooloperator>(constComplex&c1,constComplex&c2);friendbooloperator>=(constComplex&c1,constComplex&c2);friendbooloperator<(constComplex&c1,constComplex&c2);friendbooloperator<=(constComplex&c1,constComplex&c2);friendComplexoperator+(constComplex&c1,constComplex&c2);friendComplexoperator-(constComplex&c1,constComplex&c2);friendComplexoperator*(constComplex&c1,constComplex&c2);friendComplexoperator/(constComplex&c1,constComplex&c2);booloperator==(constComplex&c1,constComplex&c2){return(c1.real==c2.real)&&(c1.imag==c2.imag);}booloperator!=(constComplex&c1,constComplex&c2){return!(c1==c2);}booloperator>(constComplex&c1,constComplex&c2){returnc1.modulus()>c2.modulus();}booloperator>=(constComplex&c1,constComplex&c2){returnc1.modulus()>=c2.modulus();}booloperator<(constComplex&c1,constComplex&c2){returnc1.modulus()<c2.modulus();}booloperator<=(constComplex&c1,constComplex&c2){returnc1.modulus()<=c2.modulus();}Complexoperator+(constComplex&c1,constComplex&c2){Complextemp;temp.real=c1.real+c2.real;temp.imag=c1.imag+c2.imag;returntemp;}Complexoperator-(constComplex&c1,constComplex&c2){Complextemp;temp.real=c1.real-c2.real;temp.imag=c1.imag-c2.imag;returntemp;}Complexoperator*(constComplex&c1,constComplex&c2){Complextemp;temp.real=c1.real*c2.real-c1.imag*c2.imag;temp.imag=c1.real*c2.imag+c1.imag*c2.real;returntemp;}Complexoperator/(constComplex&c1,constComplex&c2){doubled=c2.modulus();if(d!=0){Complextemp;temp.real=(c1.real*c2.real+c1.imag*c2.imag)/d;temp.imag=(c1.imag*c2.real-c1.real*c2.imag)/d;returntemp;}lse{cout<<"Errorinoperation/ofComplex"<<endl;exit(-1);}}lclassPolynomial......public:Polynomial();12na+ax+ax212nPolynomial(doublecoefs[],intexps[],intsize);//系數(shù)數(shù)組、指數(shù)數(shù)組和項數(shù)Polynomial(constPolynomial&);~Polynomial();Polynomial&operator=(constPolynomial&);intdegree()const;//最高冪指數(shù)doubleevaluate(doublex)const;//計算多項式的值booloperator==(constPolynomial&)const;booloperator!=(constPolynomial&)const;Polynomialoperator+(constPolynomial&)const;Polynomialoperator-(constPolynomial&)const;Polynomialoperator*(constPolynomial&)const;Polynomial&operator+=(constPolynomial&);Polynomial&operator-=(constPolynomial&);Polynomial&operator*=(constPolynomial&);classPolynomial{double*pcoefs;int*pexps;intnum_of_items;intadd(constPolynomial&p,double*coefs,int*exps)const;intsubtract(constPolynomial&p,double*coefs,int*exps)const;public:Polynomial();Polynomial(doublecoefs[],intexps[],intsize);Polynomial(constPolynomial&p);~Polynomial();Polynomial&operator=(constPolynomial&p);intdegree()const;doubleevaluate(doublex)const;booloperator==(constPolynomial&p)const;booloperator!=(constPolynomial&p)const;Polynomialoperator+(constPolynomial&p)const;Polynomialoperator-(constPolynomial&p)const;Polynomialoperator*(constPolynomial&p)const;Polynomial&operator+=(constPolynomial&p);Polynomial&operator-=(constPolynomial&p);Polynomial&operator*=(constPolynomial&p);intPolynomial::add(constPolynomial&p,double*coefs,int*exps)const{intcount=0,i=0,j=0;while(i<num_of_items&&j<p.num_of_items){if(pexps[i]==p.pexps[j]){if(pcoefs[i]!=-p.pcoefs[j]){coefs[count]=pcoefs[i]+p.pcoefs[j];exps[count]=pexps[i];count++;}}elseif(pexps[i]<p.pexps[j]){coefs[count]=pcoefs[i];exps[count]=pexps[i];count++;i++;}e{coefs[count]=p.pcoefs[j];exps[count]=p.pexps[j];count++;j++;}}if(i<num_of_items)while(i<num_of_items){coefs[count]=pcoefs[i];exps[count]=pexps[i];count++;i++;}while(j<p.num_of_items){coefs[count]=p.pcoefs[j];exps[count]=p.pexps[j];count++;j++;}returncount;}intPolynomial::subtract(constPolynomial&p,double*coefs,int*exps)const{intcount=0,i=0,j=0;while(i<num_of_items&&j<p.num_of_items){if(pexps[i]==p.pexps[j]){if(pcoefs[i]!=p.pcoefs[j]){coefs[count]=pcoefs[i]-p.pcoefs[j];exps[count]=pexps[i];count++;}}elseif(pexps[i]<p.pexps[j]){coefs[count]=pcoefs[i];exps[count]=pexps[i];count++;i++;}e{coefs[count]=-p.pcoefs[j];exps[count]=p.pexps[j];count++;j++;}}if(i<num_of_items)while(i<num_of_items){coefs[count]=pcoefs[i];exps[count]=pexps[i];count++;i++;}while(j<p.num_of_items){coefs[count]=-p.pcoefs[j];exps[count]=p.pexps[j];count++;j++;}returncount;}Polynomial::Polynomial(){pcoefs=NULL;pexps=NULL;num_of_items=0;}Polynomial::Polynomial(doublecoefs[],intexps[],intsize){num_of_items=size;pcoefs=newdouble[num_of_items];pexps=newint[num_of_items];inti;for(i=0;i<num_of_items;i++){pcoefs[i]=coefs[i];pexps[i]=exps[i];}//按指數(shù)排序(冒泡排序)for(i=num_of_items;i>1;i--){boolexchange=false;for(intj=1;j<i;j++){if(pexps[j]<pexps[j-1])inttemp1=pexps[j];pexps[j]=pexps[j-1];pexps[j-1]=temp1;coefsjdoubletemp2=pcoefs[j];pcoefs[j]=pcoefs[j-1];pcoefs[j-1]=temp2;exchange=true;}}if(!exchange)break;}}Polynomial::Polynomial(constPolynomial&p){num_of_items=p.num_of_items;pcoefs=newdouble[num_of_items];pexps=newint[num_of_items];for(inti=0;i<num_of_items;i++){pcoefs[i]=p.pcoefs[i];pexps[i]=p.pexps[i];}}Polynomial::~Polynomial(){delete[]pcoefs;delete[]pexps;pcoefs=NULL;pexps=NULL;num_of_items=0;}Polynomial&Polynomial::operator=(constPolynomial&p){delete[]pcoefs;delete[]pexps;num_of_items=p.num_of_items;pcoefs=newdouble[num_of_items];pexps=newint[num_of_items];for(inti=0;i<num_of_items;i++){pcoefs[i]=p.pcoefs[i];pexps[i]=p.pexps[i];}return*this;}intPolynomial::degree()const{if(num_of_items==0)return0;ereturnpexps[num_of_items-1];}doublePolynomial::evaluate(doublex)const{}doublesum=0;for(inti=0;i<num_of_items;i++){doubletemp=pcoefs[i];for(intj=0;j<pexps[i];j++)temp*=x;sum+=temp;}returnsum;boolPolynomial::operator==(constPolynomial&p)const{if(num_of_items!=p.num_of_items)returnfalse;for(inti=0;i<num_of_items;i++)if(pcoefs[i]!=p.pcoefs[i]||pexps[i]!=p.pexps[i])returnfalse;returntrue;}boolPolynomial::operator!=(constPolynomial&p)const{return!(*this==p);}PolynomialPolynomial::operator+(constPolynomial&p)const{double*coefs=newdouble[num_of_items+p.num_of_items];int*exps=newint[num_of_items+p.num_of_items];intcount=add(p,coefs,exps);Polynomialtemp(coefs,exps,count);delete[]coefs;delete[]exps;returntemp;}PolynomialPolynomial::operator-(constPolynomial&p)const{double*coefs=newdouble[num_of_items+p.num_of_items];int*exps=newint[num_of_items+p.num_of_items];intcount=subtract(p,coefs,exps);Polynomialtemp(coefs,exps,count);delete[]coefs;delete[]exps;returntemp;}PolynomialPolynomial::operator*(constPolynomial&p)const{Polynomialsum,temp=*this;for(inti=0;i<p.num_of_items;i++){for(intj=0;j<num_of_items;j++){temp.pcoefs[j]=pcoefs[j]*p.pcoefs[i];temp.pexps[j]=pexps[j]+p.pexps[i];}mtemp}returnsum;}Polynomial&Polynomial::operator+=(constPolynomial&p){double*coefs=newdouble[num_of_items+p.num_of_items];int*exps=newint[num_of_items+p.num_of_items];intcount=add(p,coefs,exps);delete[]pcoefs;delete[]pexps;pcoefs=coefs;//有多余的空間,實際的項數(shù)由count決定。pexps=exps;//同上。num_of_items=count;return*this;}Polynomial&Polynomial::operator-=(constPolynomial&p){double*coefs=newdouble[num_of_items+p.num_of_items];int*exps=newint[num_of_items+p.num_of_items];intcount=subtract(p,coefs,exps);delete[]pcoefs;delete[]pexps;pcoefs=coefs;//有多余的空間,實際的項數(shù)由count決定。pexps=exps;//同上。num_of_items=count;return*this;}Polynomial&Polynomial::operator*=(constPolynomial&p){Polynomialsum,temp=*this;for(inti=0;i<p.num_of_items;i++){for(intj=0;j<num_of_items;j++){temp.pcoefs[j]=pcoefs[j]*p.pcoefs[i];temp.pexps[j]=pexps[j]+p.pexps[i];}mtemp}*this=sum;return*this;}用操作符重載重新實現(xiàn)習(xí)題6-8中的第17題集合類的一些操作:<=(包含于)、==(相等)、!=(不等)、|(并集)、&(交集)、-(差集)、+=(增加元素)、-=(刪除元素)等。#include<iostream>usingnamespacestd;structNode{intvalue;Node*next;classIntSet{public:IntSet();IntSet(constIntSet&s);~IntSet();boolis_empty()const;//判斷是否為空集。intsize()const;//獲取元素個數(shù)。boolis_element(inte)const;//判斷e是否屬于集合。voiddisplay()const;//顯示集合中的所有元素。booloperator<=(constIntSet&s)const;//判斷s是否包含于集合。booloperator==(constIntSet&s)const;//判斷集合是否相等。booloperator!=(constIntSet&s)const;//判斷集合是否不相等。IntSet&operator+=(inte);//將e加入到集合中。IntSet&operator-=(inte);//把e從集合中刪除。IntSetoperator|(constIntSet&s)const;//計算集合的并集。IntSetoperator&(constIntSet&s)const;//計算集合的交集。IntSetoperator-(constIntSet&s)const;//計算集合的差。IntSet&operator=(constIntSet&s);//集合賦值private:intcount;Node*head;IntSet::IntSet(){count=0;head=NULL;}IntSet::IntSet(constIntSet&s){}head=NULL;count=0;Node*p=s.head;for(inti=0;i<s.count;i++){*this+=(p->value);p=p->next;}IntSet::~IntSet(){}Node*p;while(head!=NULL){p=head;head=head->next;deletep;}count=0;boolIntSet::is_empty()const{returncount==0true:false;}intIntSet::size()const{returncount;}boolIntSet::is_element(inte)const{for(Node*p=head;p!=NULL;p=p->next)if(p->value==e)returntrue;returnfalse;}boolIntSet::operator<=(constIntSet&s)const{for(Node*p=s.head;p!=NULL;p=p->next)if(!is_element(p->value))returnfalse;returntrue;}boolIntSet::operator==(constIntSet&s)const{if(count!=s.count)returnfalse;elseif(*this<=s&&s<=*this)returntrue;elsereturnfalse;}boolIntSet::operator!=(constIntSet&s)const{return!(*this==s);}voidIntSet::display()const{for(Node*p=head;p!=NULL;p=p->next)cout<<p->value<<'\t';cout<<endl;}IntSet&IntSet::operator+=(inte){if(!is_element(e)){Node*p=newNode;p->value=e;p->next=head;head=p;count++;}return*this;}IntSet&IntSet::operator-=(inte){if(is_element(e)){if(head->value==e){Node*p=head;head=head->next;deletep;}else{for(Node*p=head;p->next!=NULL;p=p->next){if(p->next->value==e){Node*temp=p->next;p->next=temp->next;deletetemp;break;}}}count--;}return*this;}IntSetIntSet::operator|(constIntSet&s)const{}IntSetset(s);Node*p=head;while(p!=NULL){if(!set.is_element(p->value))set+=p->value;p=p->next;}returnset;IntSetIntSet::operator&(constIntSet&s)const{}IntSetset;Node*p=head;while(p!=NULL){if(s.is_element(p->value))set+=p->value;p=p->next;}returnset;IntSetIntSet::operator-(constIntSet&s)const{IntSetset;Node*p=head;while(p!=NULL){if(!s.is_element(p->value))set+=p->value;p=p->next;}returnset;}IntSet&IntSet::operator=(constIntSet&s){Node*p;while(head!=NULL){p=head;head=head->next;deletep;}count=0;p=s.head;for(inti=0;i<s.count;i++){*this+=(p->value);p=p->next;}return*this;}定義一個帶下標(biāo)范圍檢查、數(shù)組整體賦值和比較功能的一維int型數(shù)組類:IntArray。#include<iostream>usingnamespacestd;classIntArray{int*p_buf;intsize;public:IntArray(intn){}size=n;p_buf=newint[size];for(inti=0;i<size;i++)p_buf[i]=0;IntArray(constIntArray&x){size=x.size;p_buf=newint[size];for(inti=0;i<size;i++)p_buf[i]=x.p_buf[i];}~IntArray(){delete[]p_buf;p_buf=NULL;size=0;}int&operator[](inti)//取某位置上的字符,{if(i<0||i>=size){cerr<<"超出數(shù)組范圍!\n";exit(-1);}returnp_buf[i];}intoperator[](inti)const//取某位置上的字符,用于常量對象{if(i<0||i>=size){cerr<<"超出數(shù)組范圍!\n";exit(-1);}returnp_buf[i];}IntArray&operator=(IntArray&x){if(&x==this)return*this;if(size!=x.size){cerr<<"兩個數(shù)組尺寸不同!\n";exit(-1);}for(inti=0;i<size;i++)p_buf[i]=x.p_buf[i];return*this;}booloperator==(IntArray&x){if(&x==this)returntrue;for(inti=0;i<size;i++)if(p_buf[i]!=x.p_buf[i])returnfalse;returntrue;}booloperator!=(IntArray&x){return!(*this==x);}定義一個不受計算機字長限制的整數(shù)類INT,要求INT與INT以及INT與C++基本數(shù)據(jù)類型int之間能進行+、-、×、÷和=運算,并且能通過cout輸出INT類型的值。#include<iostream>#include<cstring>usingnamespacestd;classINT{char*p_buf;//從低位到高位存儲整型數(shù),intbuf_len,//p_buf所占空間大小(為10的倍數(shù))sign;//整型數(shù)的符號(1為正,-1為負(fù))voidAdd(constINT&i);//把i加到*this中voidMinus(constINT&i);//從*this中減去iINT(char*p,intlen,ints=1);//新對象的p_buf在已有的空間p上(不再另外分配空間)。public:TINT(inti);INT(char*num);INT(constINT&i);~INT();INT&operator=(constINT&i);INT&INT::operator+=(constINT&i);INT&INT::operator-=(constINT&i);friendINToperator+(constINT&i1,constINT&i2);friendINToperator-(constINT&i1,constINT&i2);friendINToperator*(constINT&i1,constINT&i2);friendINToperator/(constINT&i1,constINT&i2);friendostream&operator<<(ostream&out,constINT&i);INT::INT(){sign=1;buf_len=10;p_buf=newchar[buf_len+1];p_buf[0]='0';p_buf[1]='\0';}INT::INT(inti){if(i>=0)sign=1;else{}sign=-1;i=-i;intj=i,k=0;{k++;j/=10;}while(j!=0);buf_len=(k/10+1)*10;p_buf=newchar[buf_len+1];j=0;{k=i%10;p_buf[j++]=k+'0';i/=10;}while(i!=0);p_buf[j]='\0';}INT::INT(char*num){if(*num=='-'){sign=-1;num++;}elseif(*num=='+'){sign=1;num++;}elsesign=1;buf_len=(strlen(num)/10+1)*10;p_buf=newchar[buf_len+1];for(inti=0,j=strlen(num)-1;j>=0;i++,j--)p_buf[i]=num[j];p_buf[i]='\0';}INT::INT(constINT&i){sign=i.sign;buf_len=i.buf_len;p_buf=newchar[buf_len+1];strcpy(p_buf,i.p_buf);}INT::INT(char*p,intlen,ints){p_buf=p;buf_len=len;sign=s;}INT::~INT(){delete[]p_buf;p_buf=NULL;buf_len=0;}INT&INT::operator=(constINT&i){sign=i.sign;if(buf_len<i.buf_len){delete[]p_buf;buf_len=i.buf_len;p_buf=newchar[buf_len+1];}strcpy(p_buf,i.p_buf);return*this;}voidINT::Add(constINT&i)//絕對值加{intlen1=strlen(p_buf);intlen2=strlen(i.p_buf);intbuf_len1=(((len1>len2len1:len2)+1)/10+1)*10;if(buf_len1>buf_len){char*p_buf1=newchar[buf_len1+1];strcpy(p_buf1,p_buf);delete[]p_buf;p_buf=p_buf1;buf_len=buf_len1;}char*p1,*p2;//p1指向長的數(shù),p2指向短的數(shù)if(len1>=len2){p1=p_buf;p2=i.p_buf;}lse{p1=i.p_buf;p2=p_buf;}intcarry=0,sum;char*p=p_buf;//處理公共長度部分while(*p2!='\0'){sum=(*p1-'0')+(*p2-'0')+carry;if(sum>=10){carry=1;*p=(sum-10)+'0';}else{}carry=0;*p=sum+'0';p1++;p2++;p++;}//處理較大整數(shù)的剩余部分while(*p1!='\0'){if(carry==0)*p=*p1;e{sum=(*p1-'0')+carry;if(sum>=10){carry=1;*p=(sum-10)+'0';}lse{carry=0;*p=sum+'0';}}p1++;p++;}if(carry!=0)//最后檢查是否還有進位,若有就放入和的最高位{*p='1';}*p='\0';}voidINT::Minus(constINT&i)//絕對值減,*this-i{intlen1=strlen(p_buf);intlen2=strlen(i.p_buf);intbuf_len1=((len1>len2len1:len2)/10+1)*10;if(buf_len1>buf_len){char*p_buf1=newchar[buf_len1+1];strcpy(p_buf1,p_buf);delete[]p_buf;p_buf=p_buf1;buf_len=buf_len1;}char*p1,*p2;if(len1>len2)p1=p_buf;elseif(len1<len2)p1=i.p_buf;else{intj;for(j=len1-1;j>=0;j--){if(p_buf[j]>i.p_buf[j]){p1=p_buf;break;}elseif(p_buf[j]<i.p_buf[j]){p1=i.p_buf;break;}}if(j<0)//如果兩個數(shù)完全相同{sign=1;strcpy(p_buf,"0");return}}if(p1==p_buf){p2=i.p_buf;}lse{p2=p_buf;sign=i.sign;}intcarry=0,diff;char*p=p_buf;//公有長度部分相減while(*p2!='\0'){diff=*p1-*p2-carry;if(diff<0){*p=(diff+10)+'0';carry=1;}else{*p=diff+'0';carry=0;}p1++;p2++;p++;}//將被減數(shù)中未參與相減的高位也計算到差中while(*p1!='\0'){if(carry==0)*p=*p1;e{diff=(*p1-'0')-carry;if(diff<0){*p=(diff+10)+'0';carry=1;}lse{*p=diff+'0';carry=0;}}p1++;p++;}while(p!=p_buf&&*p=='0')p--;//去掉高位的0*(p+1)='\0';}INT&INT::operator+=(constINT&i){if(sign==i.sign)//如果兩個數(shù)符號相同,絕對值相加Add(i);else//如果兩個數(shù)符號相反,絕對值相減Minus(i);return*this;}INToperator+(constINT&i1,constINT&i2){INTtemp(i1);temp+=i2;returntemp;}INT&INT::operator-=(constINT&i){INT*p=(INT*)&i;p->sign=-p->sign;//把i變成-i*this+=*p;//*this+=-ip->sign=-p->sign;//把i還原return*this;}INToperator-(constINT&i1,constINT&i2){INTtemp(i1);temp-=i2;returntemp;}INToperator*(constINT&i1,constINT&i2){intlen1=strlen(i1.p_buf);intlen2=strlen(i2.p_buf);intbuf_len=((len1+len2)/10+1)*10;char*p_buf=newchar[buf_len+1];INTproduct,temp(p_buf,buf_len,1);//用一個乘數(shù)(i1)的每一位與另一個乘數(shù)(i2)相乘,結(jié)果(temp)向左移相應(yīng)的位數(shù)后加到乘積(product)中去for(intj=0;j<len1;j++){intcarry=0,mul,n;for
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級上冊數(shù)學(xué)聽評課記錄 《擲一擲》人教版
- 一年級上冊數(shù)學(xué)聽評課記錄-第4單元:第2課時《一起來分類》北師大版
- 豬肉攤位員工合同(2篇)
- 魯人版九年級道德與法治上冊 3.1 我們共同的精神家園 聽課評課記錄
- 粵教版地理七年級上冊5.3《聚落的發(fā)展變化》聽課評課記錄
- 八年級歷史人教版下冊聽課評課記錄:第15課 鋼鐵長城
- 湘教版數(shù)學(xué)七年級上冊4.1《幾何圖形》聽評課記錄
- 蘇科版數(shù)學(xué)七年級下冊《11.2 不等式的解集》聽評課記錄2
- 2022年新課標(biāo)八年級上冊道德與法治《10.2 天下興亡 匹夫有責(zé) 》聽課評課記錄
- 魯教版地理七年級下冊第九章《青藏地區(qū)》單元備課聽課評課記錄
- 三年級上冊數(shù)學(xué)脫式計算大全600題及答案
- 計算機控制系統(tǒng) 課件 第10章 網(wǎng)絡(luò)化控制系統(tǒng)的分析與設(shè)計
- 魯教版(五四制)七年級數(shù)學(xué)上冊期末考試卷-附帶答案
- 南京大學(xué)儀器分析習(xí)題集
- 空調(diào)維保應(yīng)急預(yù)案
- 小學(xué)六年級數(shù)學(xué)上冊解決問題專項必考題西師大版
- 2023年高考語文全國乙卷作文范文及導(dǎo)寫(解讀+素材+范文)課件版
- 模塊建房施工方案
- 多域聯(lián)合作戰(zhàn)
- 定向鉆出入土點平面布置圖(可編輯)
- 美容美發(fā)場所衛(wèi)生規(guī)范
評論
0/150
提交評論