本文实例为大家分享了C++单链表实现大数加法,供大家参考,具体内容如下
Input Format
输入文件包括两行。
第一行包括一个正整数,保证位数不超过1000000。
第二行包括一个正整数,保证位数不超过1000000。
Output Format
输出文件包括一行。
第一行包括一个正整数。
Sample Input
10558
22
Sample Output
10580
#include
using namespace std;
class BigData {
friend ostream &operator<
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<
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;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。