У меня проблема: я пытаюсь создать программу, которая использует связанные списки для вычитания и сложения в C++, однако я обратился к вам, потому что больше не знаю, почему она не работает должным образом, ниже это лучшая версия моего плохого кода. Если кто-нибудь скажет мне, что не так, я буду благодарен
Да, я знаю, что это более простые способы сделать это, но я нужен тот, который использует связанные списки
#include
#include
using namespace std;
class Node {
public:
int data;
Node *next;
Node(int val) {
data = val;
next = nullptr;
}
};
// Function to reverse the linked list
Node *reverse(Node *head) {
Node *prev = nullptr, *curr = head, *next;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
// Function to add two numbers represented by linked list
Node *addTwoLists(Node *num1, Node *num2) {
Node *res = nullptr, *curr = nullptr;
int carry = 0;
num1 = reverse(num1);
num2 = reverse(num2);
while (num1 != nullptr || num2 != nullptr || carry != 0) {
int sum = carry;
if (num1 != nullptr) {
sum += num1->data;
num1 = num1->next;
}
if (num2 != nullptr) {
sum += num2->data;
num2 = num2->next;
}
Node* newNode = new Node(sum % 10);
carry = sum / 10;
if (res == nullptr) {
res = newNode;
curr = newNode;
} else {
curr->next = newNode;
curr = curr->next;
}
}
return reverse(res);
}
// Function to subtract two numbers represented by linked list
Node *subtractTwoLists(Node *num1, Node *num2) {
Node *res = nullptr, *curr = nullptr;
int borrow = 0;
num1 = reverse(num1);
num2 = reverse(num2);
while (num1 != nullptr || num2 != nullptr || borrow != 0) {
int diff = borrow;
if (num1 != nullptr) {
diff += num1->data;
num1 = num1->next;
}
if (num2 != nullptr) {
diff -= num2->data;
num2 = num2->next;
}
if (diff < 0) {
diff += 10;
borrow = -1;
} else {
borrow = 0;
}
Node* newNode = new Node(diff);
if (res == nullptr) {
res = newNode;
curr = newNode;
} else {
curr->next = newNode;
curr = curr->next;
}
}
return reverse(res);
}
// Function to print the linked list
void printList(Node *head) {
Node *curr = head;
while (curr != nullptr) {
cout data;
curr = curr->next;
}
cout next = newNode;
curr = curr->next;
}
}
return head;
}
int main() {
string num1Str, num2Str;
// Take input for both numbers as strings
cout > num1Str;
cout > num2Str;
// Create linked lists from the input strings
Node *num1 = createLinkedListFromString(num1Str);
Node *num2 = createLinkedListFromString(num2Str);
// Addition
Node *sum = addTwoLists(num1, num2);
cout
Подробнее здесь: https://stackoverflow.com/questions/793 ... ist-in-cpp
Длинное вычитание и сложение с использованием связанного списка в cpp ⇐ C++
Программы на C++. Форум разработчиков
1737165349
Anonymous
У меня проблема: я пытаюсь создать программу, которая использует связанные списки для вычитания и сложения в C++, однако я обратился к вам, потому что больше не знаю, почему она не работает должным образом, ниже это лучшая версия моего плохого кода. Если кто-нибудь скажет мне, что не так, я буду благодарен
Да, я знаю, что это более простые способы сделать это, но я нужен тот, который использует связанные списки
#include
#include
using namespace std;
class Node {
public:
int data;
Node *next;
Node(int val) {
data = val;
next = nullptr;
}
};
// Function to reverse the linked list
Node *reverse(Node *head) {
Node *prev = nullptr, *curr = head, *next;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
// Function to add two numbers represented by linked list
Node *addTwoLists(Node *num1, Node *num2) {
Node *res = nullptr, *curr = nullptr;
int carry = 0;
num1 = reverse(num1);
num2 = reverse(num2);
while (num1 != nullptr || num2 != nullptr || carry != 0) {
int sum = carry;
if (num1 != nullptr) {
sum += num1->data;
num1 = num1->next;
}
if (num2 != nullptr) {
sum += num2->data;
num2 = num2->next;
}
Node* newNode = new Node(sum % 10);
carry = sum / 10;
if (res == nullptr) {
res = newNode;
curr = newNode;
} else {
curr->next = newNode;
curr = curr->next;
}
}
return reverse(res);
}
// Function to subtract two numbers represented by linked list
Node *subtractTwoLists(Node *num1, Node *num2) {
Node *res = nullptr, *curr = nullptr;
int borrow = 0;
num1 = reverse(num1);
num2 = reverse(num2);
while (num1 != nullptr || num2 != nullptr || borrow != 0) {
int diff = borrow;
if (num1 != nullptr) {
diff += num1->data;
num1 = num1->next;
}
if (num2 != nullptr) {
diff -= num2->data;
num2 = num2->next;
}
if (diff < 0) {
diff += 10;
borrow = -1;
} else {
borrow = 0;
}
Node* newNode = new Node(diff);
if (res == nullptr) {
res = newNode;
curr = newNode;
} else {
curr->next = newNode;
curr = curr->next;
}
}
return reverse(res);
}
// Function to print the linked list
void printList(Node *head) {
Node *curr = head;
while (curr != nullptr) {
cout data;
curr = curr->next;
}
cout next = newNode;
curr = curr->next;
}
}
return head;
}
int main() {
string num1Str, num2Str;
// Take input for both numbers as strings
cout > num1Str;
cout > num2Str;
// Create linked lists from the input strings
Node *num1 = createLinkedListFromString(num1Str);
Node *num2 = createLinkedListFromString(num2Str);
// Addition
Node *sum = addTwoLists(num1, num2);
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79366455/long-subtraction-and-addition-using-linked-list-in-cpp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия