从TXT文件读取两个超大数
时间: 2023-07-18 12:20:07 浏览: 33
以下是一个示例代码,实现从 TXT 文件中读取两个超大数,并将它们存入链表中,再对它们进行求和(不考虑进位):
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {
int num;
struct Node* next;
} Node;
Node* createNode(int num) {
Node* node = (Node*)malloc(sizeof(Node));
node->num = num;
node->next = NULL;
return node;
}
Node* addNode(Node* head, int num) {
Node* node = createNode(num);
if (head == NULL) {
head = node;
} else {
Node* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = node;
}
return head;
}
Node* readNumberFromFile(char* filename) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s!\n", filename);
return NULL;
}
char buf[1024];
fgets(buf, sizeof(buf), fp);
int len = strlen(buf);
Node* head = NULL;
for (int i = len - 1; i >= 0; i--) {
int num = buf[i] - '0';
head = addNode(head, num);
}
fclose(fp);
return head;
}
Node* sum(Node* num1, Node* num2) {
Node* result = NULL;
Node* current1 = num1;
Node* current2 = num2;
while (current1 != NULL || current2 != NULL) {
int sum = 0;
if (current1 != NULL) {
sum += current1->num;
current1 = current1->next;
}
if (current2 != NULL) {
sum += current2->num;
current2 = current2->next;
}
result = addNode(result, sum);
}
return result;
}
void printNumber(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d", current->num);
current = current->next;
}
printf("\n");
}
int main() {
printf("Enter the first number filename: ");
char filename1[1024];
scanf("%s", filename1);
printf("Enter the second number filename: ");
char filename2[1024];
scanf("%s", filename2);
Node* num1 = readNumberFromFile(filename1);
Node* num2 = readNumberFromFile(filename2);
Node* result = sum(num1, num2);
printf("Result: ");
printNumber(result);
return 0;
}
```
这段代码与前面的示例代码相似,不同之处在于 `readNumberFromFile` 函数用于从 TXT 文件中读取一个超大数,并将其存入链表中。在 `main` 函数中,首先读取两个文件名,然后分别调用 `readNumberFromFile` 函数读取两个超大数,最后对它们进行求和,并将结果输出到标准输出中。需要注意的是,这里假设 TXT 文件的每一行都是一个合法的非负整数,且不包含空格等额外字符。