本题要求采用双链表实现无符号大数类,要求实现无符号大数类拷贝控制函数,要求支持无符号大数的加、减、比较、显示等运算,加、减结果必须返回无符号大数,便于进一步参加运算,不可存在内存泄漏。
不使用动态分配扣40%,存在内存泄漏最多扣20%,程序结构要合理,命名规范,程序结构不合理最多扣20%,课内上机没有完成扣20%。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
class Unsigned_Big_Number{
public:
Unsigned_Big_Number(); //构造函数
~Unsigned_Big_Number(); //析构函数
// Unsigned_Big_Number & operator = (const Unsigned_Big_Number &rhs); //复制赋值
Unsigned_Big_Number & operator = (Unsigned_Big_Number && rhs) noexcept; //移动赋值
// Unsigned_Big_Number(const Unsigned_Big_Number &); //拷贝构造
Unsigned_Big_Number(Unsigned_Big_Number &&)noexcept; //移动构造
void read(); //读入数据
void display()const; //显示并换行
void display(int x)const; //重载,显示不换行
int compare(const Unsigned_Big_Number &rhs)const; //比较大小
void Compare_And_Display(const Unsigned_Big_Number &rhs); //比较大小后显示
Unsigned_Big_Number plus(const Unsigned_Big_Number &rhs); //加法
Unsigned_Big_Number subtraction(const Unsigned_Big_Number &rhs); //减法
private:
struct Node{
int data;
struct Node *pre;
struct Node *nxt;
}*m_pHead,*m_pTail;
int m_len; //链表长度
};
//构造函数
Unsigned_Big_Number::Unsigned_Big_Number(){
m_pHead = new Node;
m_pHead ->nxt =NULL;
}
//析构函数
Unsigned_Big_Number::~Unsigned_Big_Number(){
while(m_pHead){
Node *p=m_pHead;
m_pHead=p->nxt;
delete p;
}
}
//拷贝构造
//Unsigned_Big_Number::Unsigned_Big_Number(const Unsigned_Big_Number &rhs){
// m_pHead = new Node;
// Node *last = m_pHead;
// Node *p=rhs.m_pHead->nxt;
// while(p){
// Node*q = new Node;
// q->data = p->data;
// last->nxt =q;
// q->pre = last;
// last = q;
// p=p->nxt;
// }
// last->nxt=NULL;
//}
//复制赋值
//Unsigned_Big_Number&Unsigned_Big_Number::operator = (const Unsigned_Big_Number &rhs){
// Unsigned_Big_Number tmp(rhs);
// Node *t = m_pHead;
// m_pHead = tmp.m_pHead;
// tmp.m_pHead = t;
// return *this;
//}
//移动赋值
Unsigned_Big_Number & Unsigned_Big_Number::operator =(Unsigned_Big_Number &&rhs)noexcept{
Node *p = this->m_pHead;
this->m_pHead = rhs.m_pHead;
rhs.m_pHead=p;
p = this->m_pTail;
this->m_pTail = rhs.m_pTail;
rhs.m_pTail = p;
this->m_len = rhs.m_len;
return *this;
}
//移动构造函数
Unsigned_Big_Number::Unsigned_Big_Number(Unsigned_Big_Number &&rhs)noexcept{
m_pHead = rhs.m_pHead;
rhs.m_pHead = NULL;
}
//读入函数
void Unsigned_Big_Number::read(){
string s;
cin>>s;
Node *p=m_pHead;
int i =