只用鏈表不用類不用algorithm實現大數加減
时间: 2023-07-27 14:06:11 浏览: 38
以下是使用链表实现大数加减的示例代码,其中使用两个链表分别存储两个大数,通过遍历链表进行相应的运算,最终得到结果:
```c++
#include <iostream>
using namespace std;
struct ListNode
{
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* res = new ListNode(0);
ListNode* p3 = res;
int carry = 0;
while (p1 != NULL || p2 != NULL || carry != 0)
{
int sum = (p1 == NULL ? 0 : p1->val) + (p2 == NULL ? 0 : p2->val) + carry;
carry = sum / 10;
p3->next = new ListNode(sum % 10);
p3 = p3->next;
p1 = p1 == NULL ? NULL : p1->next;
p2 = p2 == NULL ? NULL : p2->next;
}
return res->next;
}
ListNode* subtractTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* res = new ListNode(0);
ListNode* p3 = res;
int borrow = 0;
while (p1 != NULL || p2 != NULL)
{
int num1 = p1 == NULL ? 0 : p1->val;
int num2 = p2 == NULL ? 0 : p2->val;
int diff = num1 - num2 - borrow;
if (diff < 0)
{
diff = diff + 10;
borrow = 1;
}
else
{
borrow = 0;
}
p3->next = new ListNode(diff);
p3 = p3->next;
p1 = p1 == NULL ? NULL : p1->next;
p2 = p2 == NULL ? NULL : p2->next;
}
return res->next;
}
int main()
{
// 输入两个大数,以链表形式存储
ListNode* l1 = new ListNode(2);
l1->next = new ListNode(4);
l1->next->next = new ListNode(3);
ListNode* l2 = new ListNode(5);
l2->next = new ListNode(6);
l2->next->next = new ListNode(4);
// 大数加法
ListNode* sum = addTwoNumbers(l1, l2);
cout << "Sum: ";
while (sum != NULL)
{
cout << sum->val << " ";
sum = sum->next;
}
cout << endl;
// 大数减法
ListNode* diff = subtractTwoNumbers(l1, l2);
cout << "Difference: ";
while (diff != NULL)
{
cout << diff->val << " ";
diff = diff->next;
}
cout << endl;
return 0;
}
```
以上示例代码实现了使用链表进行大数加减的功能,其中addTwoNumbers函数实现了大数加法,subtractTwoNumbers函数实现了大数减法。