c++ 运用链表和指针创建superint类 储存各种形式的更大整数
时间: 2024-02-28 12:55:09 浏览: 141
好的,我可以回答这个问题。
首先,我们需要了解什么是链表和指针。链表是一种数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。指针是一个变量,它存储了另一个变量的地址。
接下来,我们可以开始创建 superint 类了。我们可以使用链表来存储一个超大整数,每个节点存储这个整数的一位数字。为了方便起见,我们可以将这个整数按照逆序存储,即个位数存储在链表的头部,最高位存储在链表的尾部。
下面是一个超大整数的链表结构体的定义:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
```
其中,`val` 表示节点的值,即整数的一位数字,`next` 表示指向下一个节点的指针。
接下来,我们可以定义一个 `superint` 类,它包含一个链表头指针和一些方法,用于实现超大整数的各种运算。
```cpp
class superint {
public:
ListNode *head;
superint() {
head = NULL;
}
superint(int x) {
head = new ListNode(x % 10);
x /= 10;
ListNode *cur = head;
while (x) {
cur->next = new ListNode(x % 10);
x /= 10;
cur = cur->next;
}
}
superint(const superint &other) {
head = NULL;
ListNode *cur = other.head;
while (cur) {
push_front(cur->val);
cur = cur->next;
}
}
~superint() {
ListNode *cur = head;
while (cur) {
ListNode *next = cur->next;
delete cur;
cur = next;
}
}
void push_front(int x) {
ListNode *new_node = new ListNode(x);
new_node->next = head;
head = new_node;
}
void push_back(int x) {
ListNode *new_node = new ListNode(x);
if (!head) {
head = new_node;
return;
}
ListNode *cur = head;
while (cur->next) {
cur = cur->next;
}
cur->next = new_node;
}
superint operator+(const superint &other) const {
superint ans;
ListNode *cur1 = head;
ListNode *cur2 = other.head;
int carry = 0;
while (cur1 || cur2 || carry) {
int sum = carry;
if (cur1) {
sum += cur1->val;
cur1 = cur1->next;
}
if (cur2) {
sum += cur2->val;
cur2 = cur2->next;
}
carry = sum / 10;
ans.push_back(sum % 10);
}
return ans;
}
};
```
其中,`push_front` 和 `push_back` 方法用于在链表头或尾部插入一个节点,`operator+` 方法用于实现超大整数的加法运算。
现在,我们就可以使用这个 `superint` 类来存储各种形式的更大整数了。
阅读全文