数据结构—线性表—八进制数加法

来源:互联网 发布:js cookie 跨域 编辑:程序博客网 时间:2024/06/08 19:59

问题描述:

假设用不带头结点的单链表表示八进制数,要求写一个函数add,该函数有两个参数p,q分别指向表示八进制数的链表,返回所得结果数的链表。

代码实现:

/*线性表实现八进制加法,可改为其他进制下加法运算,适用于大数的加法思路:用一个没有头结点,指针所指为最高位的链表来存储八进制数,每个节点存一位首先为了便于运算,把链表逆置,执行加法运算,得到的结果采取头插法建立结果链表。*/#include<iostream>using namespace std;struct OctalNode//定义链表 {int value;OctalNode *next = NULL;};OctalNode* input(OctalNode *list)//尾插法输入八进制数  即按照正常阅读方式输入 {int x;OctalNode* r=NULL;while (cin >> x&&x != -1)//输入-1时输入结束 {OctalNode* node;node = new OctalNode;node->value = x;if (list == NULL){list = node;r = list;}else{r->next = node;r = node;}}return list;}OctalNode* reserve(OctalNode* list)//将链表逆置{OctalNode *p, *pre, *r;pre = list;p = pre->next;pre->next = NULL;while (p->next != NULL){r = p->next;p->next = pre;pre = p;p = r;}p->next = pre;list = p;return list;}void output(OctalNode* list)//输出链表{OctalNode *p;p=list;while (p!= NULL){cout << p->value;p = p->next;}}int main(){OctalNode *p = NULL, *q = NULL, *head = NULL, *now;int flag = 0, temp = 0;p=input(p);q=input(q);p=reserve(p);q=reserve(q);while (p&&q)//由低位到高位依次相加{temp = p->value + q->value + flag;now = new OctalNode;now->value = temp % 8;flag = temp / 8;//判断进位now->next = head;head = now;p = p->next;q = q->next;}if (q == NULL) q = p;//统一归结为对剩下一个链表的处理while (q != NULL){temp = q->value + flag;now = new OctalNode;now->value = temp % 8;flag = temp / 8;now->next = head;head = now;q = q->next;}if (flag != 0){now = new OctalNode;now->value = temp % 8;}output(head);return 0;}


原创粉丝点击