C++单链表实现大数加法
本文实例为大家分享了C++单链表实现大数加法,供大家参考,具体内容如下
InputFormat
输入文件包括两行。
- 第一行包括一个正整数,保证位数不超过1000000。
- 第二行包括一个正整数,保证位数不超过1000000。
OutputFormat
输出文件包括一行。
- 第一行包括一个正整数。
SampleInput
10558
22
SampleOutput
10580
#includeusingnamespacestd; classBigData{ friendostream&operator<<(ostream&os,constBigData&x); friendistream&operator>>(istream&is,BigData&x); friendBigDataoperator+(BigDataa,BigDatab); private: structnode{ intdata; node*next; node(constshort&x,node*n=NULL){ data=x; next=n; } }; node*num; voidclear(); public: BigData(node*p=NULL){ if(p==NULL){ num=newnode(0); }else{ num=p; }; } BigData(constBigData&); ~BigData(){ clear(); } BigData&operator=(constBigData&); }; BigData::BigData(constBigData&x){ num=newnode(x.num->data); node*p=num,*q=x.num; while(q->next!=NULL){ q=q->next; p->next=newnode(q->data); p=p->next; } } voidBigData::clear(){ node*p=num,*q; while(p!=NULL){ q=p; p=p->next; deleteq; } num=NULL; } BigDataoperator+(BigDataa,BigDatab){ BigDatatmp; BigData::node*p,*q,*end; intcarry; tmp.num=end=newBigData::node(a.num->data+b.num->data); carry=tmp.num->data/10; tmp.num->data%=10; p=a.num->next; q=b.num->next; end=tmp.num; while(p!=NULL&&q!=NULL){ end->next=newBigData::node(p->data+q->data+carry); end=end->next; carry=end->data/10; end->data%=10; p=p->next; q=q->next; } if(p==NULL)p=q; while(p!=NULL){ end->next=newBigData::node(p->data+carry); end=end->next; carry=end->data/10; end->data%=10; p=p->next; } if(carry!=0){ end->next=newBigData::node(carry); returntmp; } } BigData&BigData::operator=(constBigData&x){ if(&x==this)return*this; clear(); num=newnode(x.num->data); node*p=num,*q=x.num; while(q->next!=NULL){ q=q->next; p->next=newnode(q->data); p=p->next; } return*this; } istream&operator>>(istream&is,BigData&x){ charch; x.clear(); while((ch=is.get())!='\n'){ x.num=newBigData::node(ch-'0',x.num); } returnis; } ostream&operator<<(ostream&os,constBigData&x){ strings; BigData::node*p=x.num; while(p!=NULL){ s=char(p->data+'0')+s; p=p->next; } for(inti=0;i >a>>b; c=a+b; cout< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。