长整数加法程序怎么写

时间:2025-01-28 18:37:56 单机游戏

```cpp

include

include

include

using namespace std;

// 定义双向链表结点结构

struct Node {

int data;

Node* prev;

Node* next;

};

// 向链表中添加新节点

void addNode(Node head, int data) {

Node* newNode = new Node();

newNode->data = data;

newNode->prev = nullptr;

newNode->next = nullptr;

if (*head == nullptr) {

*head = newNode;

return;

}

Node* temp = *head;

while (temp->next != nullptr) {

temp = temp->next;

}

temp->next = newNode;

newNode->prev = temp;

}

// 从链表中移除节点

void removeNode(Nodehead, Node* node) {

if (node->prev != nullptr) {

node->prev->next = node->next;

} else {

*head = node->next;

}

if (node->next != nullptr) {

node->next->prev = node->prev;

}

delete node;

}

// 将链表转换为字符串

string链表ToString(Node* head) {

string result = "";

Node* temp = head;

while (temp != nullptr) {

result += to_string(temp->data);

temp = temp->next;

}

return result;

}

// 实现长整数加法

string addLongIntegers(string num1, string num2) {

Node* head1 = nullptr;

Node* head2 = nullptr;

// 将输入字符串转换为链表

for (char c : num1) {

addNode(&head1, c - '0');

}

for (char c : num2) {

addNode(&head2, c - '0');

}

// 处理前导零

while (head1 != nullptr && head1->data == 0) {

removeNode(&head1, head1);

}

while (head2 != nullptr && head2->data == 0) {

removeNode(&head2, head2);

}

// 计算结果

string result;

Node* temp1 = head1;

Node* temp2 = head2;

int carry = 0;

while (temp1 != nullptr || temp2 != nullptr || carry != 0) {

int sum = carry;

if (temp1 != nullptr) {

sum += temp1->data;

temp1 = temp1->next;

}

if (temp2 != nullptr) {

sum += temp2->data;

temp2 = temp2->next;

}

result += to_string(sum % 10);

carry = sum / 10;

}

// 移除结果中的前导零

while (result.size() > 1 && result == '0') {

result.erase(result.begin());

}

return result;

}

int main() {

string num1, num2;

cout << "请输入第一个长整数(每四位一组,组间用逗号隔开): ";

getline(cin, num1);

cout << "请输入第二个长整数(每四位一组,组间用逗号隔开): ";

getline(cin, num2);

string result = addLongIntegers(num1, num2);

cout << "两个长整数的和为: " << result << endl;

return 0;

}

```

代码说明:

Node结构体:

定义了双向链表的结点结构,包含数据成员`data`,指向前驱结点的指针`prev`和指向后继结点的指针`next`。

addNode函数:

向链表中添加新节点。

removeNode函数:

从链表中移除节点。

链表ToString函数:

将链表转换为字符串。

add