时间:2021-05-20
本文实例为大家分享了C++单链表实现大数加法,供大家参考,具体内容如下
Input Format
输入文件包括两行。
Output Format
输出文件包括一行。
Sample Input
10558
22
Sample Output
10580
#include <iostream>using namespace std;class BigData { friend ostream &operator<<(ostream &os, const BigData &x); friend istream &operator>>(istream &is, BigData &x); friend BigData operator+(BigData a, BigData b);private: struct node { int data; node *next; node(const short &x, node *n = NULL) { data = x; next = n; } }; node *num; void clear();public: BigData(node *p = NULL) { if (p == NULL) { num = new node(0); } else { num = p; }; } BigData(const BigData &); ~BigData() { clear(); } BigData &operator=(const BigData &);};BigData::BigData(const BigData &x) { num = new node(x.num->data); node *p = num, *q = x.num; while (q->next != NULL) { q = q->next; p->next = new node(q->data); p = p->next; }}void BigData::clear() { node *p = num, *q; while (p != NULL) { q = p; p = p->next; delete q; } num = NULL;}BigData operator+(BigData a, BigData b) { BigData tmp; BigData::node *p, *q, *end; int carry; tmp.num = end = new BigData::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 = new BigData::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 = new BigData::node(p->data + carry); end = end->next; carry = end->data / 10; end->data %= 10; p = p->next; } if (carry != 0) { end->next = new BigData::node(carry); return tmp; }}BigData &BigData::operator=(const BigData &x) { if (&x == this)return *this; clear(); num = new node(x.num->data); node *p = num, *q = x.num; while (q->next != NULL) { q = q->next; p->next = new node(q->data); p = p->next; } return *this;}istream &operator>>(istream &is, BigData &x) { char ch; x.clear(); while ((ch = is.get()) != '\n') { x.num = new BigData::node(ch - '0', x.num); } return is;}ostream &operator<<(ostream &os, const BigData &x) { string s; BigData::node *p = x.num; while (p != NULL) { s = char(p->data + '0') + s; p = p->next; } for (int i = 0; i < s.size(); ++i)os << s[i]; return os;}int main() { BigData a, b, c; cin >> a >> b; c = a + b; cout << c;}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++实现静态单链表的实例利用数组实现的静态单链表,与严蔚敏书实现略有不同,不另设回收空间。有任何BUG或错误,希望各位朋友多多反馈~~感激不尽/*Author
双向链表C++的实现本文是通过C++的知识实现数据结构中的双向链表,这里不多说了,代码注释很清楚,实现代码://doubleLinkListimplementw
本文实例为大家分享了C++实现单链表的构造代码,供大家参考,具体内容如下单链表的构造,包括最常用函数,setData(),Insert(),Remove(),g
分别使用C++中的运算符重载的方法来实现大数之间的数学运算,包括加法、减法、乘法、除法、n次方、取模、大小比较、赋值以及输入流、输出流的重载。。并且使用这个大数
本文实例为大家分享了C++使用模板实现单链表的具体代码,供大家参考,具体内容如下这一篇可以和上一篇点击打开链接模板实现单链表进行对比看类外实现和类内实现的区别代