c语言单链表实现加减乘除,C++单链表实现大数加法

本文实例为大家分享了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;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值