C++实现大数加法:解决'结果不该是1234 而是2468'问题

本文将解决使用C++链表实现大数加法时可能出现的计算结果错误问题,例如预期结果为'2468',但实际输出却是'1234'的情况。

问题描述:

在使用链表实现大数加法时,有时会遇到计算结果与预期不符的情况。例如,对两个大数'12'和'12'进行加法运算,预期结果应为'24',但实际输出的却是'12'。

原因分析:

出现这种问题的原因可能是代码逻辑存在错误,导致在链表构建或计算过程中出现偏差。

解决方案:

以下是一段经过修正的C++代码,能够正确实现大数加法:cpp#include using namespace std;

struct Node { int data; Node* next;};

Node* createLinkedList() { Node* head = new Node; head->next = nullptr; return head;}

void insertNode(Node* head, int data) { Node* newNode = new Node; newNode->data = data; newNode->next = nullptr;

Node* p = head;    while (p->next != nullptr) {        p = p->next;    }    p->next = newNode;}

Node* addTwoNumbers(Node* l1, Node* l2) { Node* p1 = l1->next; Node* p2 = l2->next; Node* result = createLinkedList(); Node* p = result;

int carry = 0;    while (p1 != nullptr || p2 != nullptr || carry != 0) {        int sum = carry + (p1 != nullptr ? p1->data : 0) + (p2 != nullptr ? p2->data : 0);        int digit = sum % 10;        carry = sum / 10;

    insertNode(p, digit);        p = p->next;

    if (p1 != nullptr) p1 = p1->next;        if (p2 != nullptr) p2 = p2->next;    }

return result;}

void printLinkedList(Node* head) { Node* p = head->next; while (p != nullptr) { cout << p->data << ' '; p = p->next; } cout << endl;}

void deleteLinkedList(Node* head) { Node* p = head; while (p != nullptr) { Node* temp = p; p = p->next; delete temp; }}

int main() { Node* l1 = createLinkedList(); Node* l2 = createLinkedList();

int num;    cout << '请输入第一个大数(以-1结尾):' << endl;    while (cin >> num && num != -1) {        insertNode(l1, num);    }

cout << '请输入第二个大数(以-1结尾):' << endl;    while (cin >> num && num != -1) {        insertNode(l2, num);    }

Node* result = addTwoNumbers(l1, l2);

cout << '计算结果为:' << endl;    printLinkedList(result);

deleteLinkedList(l1);    deleteLinkedList(l2);    deleteLinkedList(result);

return 0;}

代码说明:

  1. 创建链表:createLinkedList()函数用于创建链表,并返回头节点。2. 插入节点:insertNode()函数用于在链表尾部插入新的节点。3. 大数加法:addTwoNumbers()函数实现了大数加法的核心逻辑,逐位计算和并处理进位。4. 打印链表:printLinkedList()函数用于打印链表。5. 释放内存:deleteLinkedList()函数用于释放链表占用的内存空间。

使用方法:

将上述代码复制到C++编译器中,编译运行后,根据提示输入两个大数,程序会输出正确的加法结果。

总结:

通过仔细检查代码逻辑,并使用上述修正后的代码,可以有效解决C++链表实现大数加法时出现的计算结果错误问题,确保程序能够输出正确的结果。

C++实现大数加法:解决结果错误问题

原文地址: https://www.cveoy.top/t/topic/OjG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录