使用C++编写如下程序:(1)用动态链表存贮数据,每结点含一个整型变量,表示若干位数。 (2)整数输入和输出按中国对于长整数的习惯表示,每3位1组,组间用逗号隔开。 (3)实现15位以上长整数的加、减运算。
时间: 2023-02-24 19:10:44 浏览: 133
这个问题需要实现两个功能:(1)使用动态链表存储数据;(2)实现15位以上长整数的加、减运算,并以中国长整数的习惯输入输出。
以下是一个参考的C语言代码:
```
#include<stdio.h>
#include<stdlib.h>
// 定义链表结点结构体
typedef struct node{
int val;
struct node *next;
} Node;
// 动态链表的数据存储
Node *create_list(int num) {
Node *head = NULL, *p = NULL, *q = NULL;
head = (Node *)malloc(sizeof(Node));
head->val = num % 10;
head->next = NULL;
p = head;
num /= 10;
while (num > 0) {
q = (Node *)malloc(sizeof(Node));
q->val = num % 10;
q->next = NULL;
p->next = q;
p = q;
num /= 10;
}
return head;
}
// 输出链表中的数字
void print_list(Node *head) {
Node *p = head;
int cnt = 1;
while (p != NULL) {
printf("%d", p->val);
p = p->next;
if (p != NULL && cnt % 3 == 0) {
printf(",");
}
cnt++;
}
}
// 计算两个链表的和
Node *add_list(Node *list1, Node *list2) {
Node *p = list1, *q = list2, *head = NULL, *r = NULL, *s = NULL;
int carry = 0;
while (p != NULL && q != NULL) {
r = (Node *)malloc(sizeof(Node));
r->val = (p->val + q->val + carry) % 10;
r->next = NULL;
carry = (p->val + q->val + carry) / 10;
if (head == NULL) {
head = r;
} else {
s->next = r;
}
s = r;
p = p->next;
q = q->next;
}
while (p != NULL) {
r = (Node *)malloc(sizeof(Node));
r->val = (p->val + carry) % 10;
r->next = NULL;
阅读全文