用c语言单向链表超长正整数的加法,设计一个程序实现两个任意长的整数求和运算
时间: 2024-02-13 11:06:03 浏览: 32
好的,以下是一个简单的用 C 语言实现单向链表超长正整数的加法的程序。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int digit;
struct Node* next;
} Node;
Node* createNode(int digit) {
Node* newNode = (Node*) malloc(sizeof(Node));
newNode->digit = digit;
newNode->next = NULL;
return newNode;
}
Node* createList(char* num) {
Node* head = createNode(-1);
Node* tail = head;
for (int i = 0; num[i] != '\0'; i++) {
tail->next = createNode(num[i] - '0');
tail = tail->next;
}
return head;
}
Node* addTwoNumbers(Node* num1, Node* num2) {
Node* head = createNode(-1);
Node* tail = head;
int carry = 0;
while (num1 != NULL || num2 != NULL || carry != 0) {
int sum = carry;
if (num1 != NULL) {
sum += num1->digit;
num1 = num1->next;
}
if (num2 != NULL) {
sum += num2->digit;
num2 = num2->next;
}
carry = sum / 10;
tail->next = createNode(sum % 10);
tail = tail->next;
}
return head->next;
}
void printList(Node* head) {
Node* curr = head;
while (curr != NULL) {
printf("%d", curr->digit);
curr = curr->next;
}
printf("\n");
}
int main() {
char num1[] = "123456789012345678901234567890";
char num2[] = "987654321098765432109876543210";
Node* list1 = createList(num1);
Node* list2 = createList(num2);
Node* sum = addTwoNumbers(list1->next, list2->next);
printList(sum);
return 0;
}
```
在这个程序中,我们首先定义了一个 `Node` 结构体,表示链表中的每个节点。我们还定义了 `createNode` 函数,用于创建一个新的节点。`createList` 函数用于将一个字符串转换为链表。`addTwoNumbers` 函数用于将两个链表相加,并返回结果链表。最后,我们定义了 `printList` 函数,用于打印链表中的数字。
在 `main` 函数中,我们创建了两个超长正整数的链表,将它们相加,并打印出结果。
阅读全文