链队列(带头结点)模板简单应用算法设计:长整数加法计算
时间: 2023-04-24 09:02:49 浏览: 159
链队列(带头结点)模板简单应用算法设计:长整数加法计算
1. 首先定义一个链队列(带头结点)来存储长整数,每个节点存储一个数字。
2. 输入两个长整数,将它们分别存储在两个链队列中。
3. 对两个链队列进行遍历,将对应位置的数字相加,并将结果存储在一个新的链队列中。
4. 如果相加的结果大于等于10,则需要进位,将进位后的数字存储在下一个节点中。
5. 最后遍历新的链队列,将每个节点的数字输出即可得到两个长整数的和。
示例代码:
#include <iostream>
#include <string>
using namespace std;
struct Node {
int data;
Node* next;
};
class Queue {
public:
Queue() {
head = new Node;
head->next = nullptr;
tail = head;
}
~Queue() {
while (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
}
void push(int x) {
Node* temp = new Node;
temp->data = x;
temp->next = nullptr;
tail->next = temp;
tail = temp;
}
int pop() {
if (head->next == nullptr) {
return -1;
}
Node* temp = head->next;
int x = temp->data;
head->next = temp->next;
if (tail == temp) {
tail = head;
}
delete temp;
return x;
}
bool empty() {
return head->next == nullptr;
}
private:
Node* head;
Node* tail;
};
int main() {
string s1, s2;
cin >> s1 >> s2;
Queue q1, q2, q3;
for (int i = s1.size() - 1; i >= 0; i--) {
q1.push(s1[i] - '0');
}
for (int i = s2.size() - 1; i >= 0; i--) {
q2.push(s2[i] - '0');
}
int carry = 0;
while (!q1.empty() || !q2.empty()) {
int x = q1.empty() ? 0 : q1.pop();
int y = q2.empty() ? 0 : q2.pop();
int sum = x + y + carry;
carry = sum / 10;
q3.push(sum % 10);
}
if (carry > 0) {
q3.push(carry);
}
while (!q3.empty()) {
cout << q3.pop();
}
cout << endl;
return 0;
}
阅读全文