该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

源码:

#include

using namespace std;

typedef int DataType;

typedef struct node{

DataType data;

node* next;

}node;

//尾插法构造单链表

void init(node* &first,int len)

{

first = NULL;

node* rear;

for(int i=0;i

DataType elem;

cin>>elem;

node* s = new node;

s->data = elem;

s->next = NULL;

if(first == NULL){

first = s;

rear = first;

}

else{

rear->next = s;

rear = s;

}

}

}

//八进制A加八进制B,结果存在链表A中

void add(node* A,node* B)

{

node* p=A,*q=B;

int flag=0,sum=0;

while(p->next!=NULL&&q->next!=NULL){

sum=p->data+q->data+flag;

p->data=sum%8;

flag=sum/8;

p=p->next;

q=q->next;

}

//A、B等长

if(p->next==NULL&&q->next==NULL){

sum=p->data+q->data+flag;

p->data=sum%8;

flag=sum/8;

if(flag==1){

node* s = new node;

s->data = flag;

s->next = NULL;

p->next=s;

}

}

//A比B短

if(p->next==NULL&&q->next!=NULL){

sum=p->data+q->data+flag;

//将A中的最后一个结点元素和B中同位置的元素相加后对8取余,并将余数放入A中的最后一个结点的数据域。

p->data=sum%8;

//记录好此时p、q所分别指向的结点元素相加后是否有进位。

flag=sum/8;

while(q->next!=NULL){

node* s = new node;

sum=q->next->data+flag;

s->data=sum%8;

flag=sum/8;

s->next = NULL;

p->next=s;

p=p->next;

q=q->next;

}

if(flag==1&&q->next==NULL){

node* s = new node;

s->data=flag;

s->next = NULL;

p->next=s;

}

}

//A比B长

if(q->next==NULL&&p->next!=NULL){

sum=p->data+q->data+flag;

p->data=sum%8;

flag=sum/8;

while(p->next!=NULL){

if(flag==1){

sum=p->next->data+flag;

p->next->data=sum%8;

flag=sum/8;

p=p->next;

}

else

break;

}

if(flag==1&&p->next==NULL){

node* s = new node;

s->data=flag;

s->next = NULL;

p->next=s;

}

}

}

void reverseList(node* &first)

{

node* q=first,*p=first;

if(first==NULL){

return;

}

else{

while(p->next!=NULL){

p=p->next;

}

first=p;

p=q->next;

while(q!=first){

q->next=first->next;

first->next=q;

q=p;

p=p->next;

}

}

}

void show(node* first)

{

node* p = first;

if(p == NULL) cout<

else{

cout<

while(p != NULL){

cout<data;

p = p->next;

}

cout<

}

}

int main()

{

node*A,*B;

int aLen,bLen;

cout<

cin>>aLen;

if(aLen>0){

cout<

}

init(A,aLen);

cout<

cin>>bLen;

if(bLen>0){

cout<

}

init(B,bLen);

reverseList(A);

reverseList(B);

add(A,B);

reverseList(A);

show(A);

return 0;

}

不知为啥如果链表A比B短,最后又有进位,那结果一直都不对(一直比正确结果多个1)。其余情况正常。看着像是Add( )函数中A比B短这种情况的问题,但找了半天没找到逻辑上哪有问题。

//八进制A加八进制B,结果存在链表A中

void add(node* A,node* B)

{

node* p=A,*q=B;

int flag=0,sum=0;

while(p->next!=NULL&&q->next!=NULL){

sum=p->data+q->data+flag;

p->data=sum%8;

flag=sum/8;

p=p->next;

q=q->next;

}

//A、B等长

if(p->next==NULL&&q->next==NULL){

sum=p->data+q->data+flag;

p->data=sum%8;

flag=sum/8;

if(flag==1){

node* s = new node;

s->data = flag;

s->next = NULL;

p->next=s;

}

}

//A比B短

if(p->next==NULL&&q->next!=NULL){

sum=p->data+q->data+flag;

//将A中的最后一个结点元素和B中同位置的元素相加后对8取余,并将余数放入A中的最后一个结点的数据域。

p->data=sum%8;

//记录好此时p、q所分别指向的结点元素相加后是否有进位。

flag=sum/8;

while(q->next!=NULL){

node* s = new node;

sum=q->next->data+flag;

s->data=sum%8;

flag=sum/8;

s->next = NULL;

p->next=s;

p=p->next;

q=q->next;

}

if(flag==1&&q->next==NULL){

node* s = new node;

s->data=flag;

s->next = NULL;

p->next=s;

}

}

//A比B长

if(q->next==NULL&&p->next!=NULL){

sum=p->data+q->data+flag;

p->data=sum%8;

flag=sum/8;

while(p->next!=NULL){

if(flag==1){

sum=p->next->data+flag;

p->next->data=sum%8;

flag=sum/8;

p=p->next;

}

else

break;

}

if(flag==1&&p->next==NULL){

node* s = new node;

s->data=flag;

s->next = NULL;

p->next=s;

}

}

}

链表表示八进制加法c语言,用单链表实现八进制加法操作,恳请大家看看Add( )函数的问题...相关推荐

  1. c语言用链表实现成绩管理系统,C语言基于单链表得学生成绩管理系统

    前言 传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统.首先给年夜家总结下为什么你们学习C语言会觉得难,尤其是对单链表这块,主要原因得是因为 ...

  2. 单链表删除指定节点c语言,在单链表删除指定节点之后的节点

    要删除在指定节点之后存在的节点,需要跳过所需数量的节点以到达节点,之后的节点将被删除. 需要跟踪这两个节点.如果在该节点之前存在的节点,则将删除该节点. 为此,使用了两个指针:ptr和ptr1. 使用 ...

  3. C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)

    http://blog.csdn.net/xiaofeige567/article/details/27484137 C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表) ...

  4. c语言实现可变单链表,c语言实现单链表

    c语言实现单链表 c语言实现单链表 定义 创建 销毁 清空 打印 获取长度 查询 删除第pos个结点 在第pos插入结点 定义 首先来看一看单链表的定义(看看百度的) 单链表是一种链式存取的数据结构, ...

  5. TypeScript算法专题 - blog1.基于TypeScript语言的单链表实现

    TypeScript算法专题 - 基于TypeScript语言的单链表实现 李俊才 CSDN:jcLee95 邮箱:291148484@163.com 专题目录:https://blog.csdn.n ...

  6. C语言基于单链表的词典软件

    C语言基于单链表的词典软件 实验1: 日期:2022-10-4 类型:设计型 题目:基于单链表的词典软件 内容: 利用单链表存储词典,可以实现从文件中加载数据.查询单词.添加词条.删除词条.将词典保存 ...

  7. c语言字符就地逆置,高手看看我的C语言代码单链表实现就地逆置

    高手看看我的C语言代码单链表实现就地逆置 单链表实现就地逆置#include #include struct type{ int date; struct type * next;}first;int ...

  8. DHU数据结构-单链表-ADT应用-长整数加法运算(使用单链表存储计算结果)

    目录 1.题目 2.题解 3.代码实现 1.题目 单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 作者: 冯向阳 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使 ...

  9. c语言实现单链表的创建(完整版)

    使用c语言实现单链表是考研的重点.但是如何实现却是一个难点.下面是我写的一个简单的创建单链表的代码. #include<stdio.h> #include<stdlib.h> ...

最新文章

  1. linux 环境变量LD_PRELOAD简介 定义优先加载的动态链接库
  2. java里的主线程和子线程以及finally不会执行的特殊情况
  3. Swift3 使用系统UIAlertView方法做吐司效果
  4. 计算机应用类专业综合知识模拟试题,2015年湖南省对口升学计算机应用类专业综合知识试题(真题)...
  5. Go程序的一生是怎样的?
  6. web memory
  7. BZOJ - 2783 树
  8. OpenCV单目视觉定位(测量)系统
  9. 学习OpenCV——计算邻接区域列表(build_adjoin)
  10. 博客上云历程(二):Docker入门介绍与使用
  11. 飞桨领航团西安回顾|技术干货大厂offer独家经验分享
  12. python熊猫图案_熊猫Python数据分析库和SQL教会了我如何取平均数
  13. 词根vol/volve/vor/vid/vis/等衍生出单词
  14. c++中static的用法详解
  15. 求一亿个数字里面最小的10个数字
  16. 对View的onMeasure方法理解
  17. 2022年广东省安全员A证第三批(主要负责人)找解析及广东省安全员A证第三批(主要负责人)考试技巧
  18. 分析乱码产生的原因及常见乱码的解决方法
  19. python networkx案例_Python包 - networkx
  20. 递归求二叉排序树ASL值

热门文章

  1. 安装 PyCharm
  2. 深度学习训练中关于数据处理方式--原始样本采集以及数据增广
  3. Faster-RCNN学习
  4. 学习JS的心路历程-函式(一)
  5. 数据采集之用户区域(USER)事件
  6. Java第十次作业--多线程
  7. 七种布局显示方式效果及实现
  8. VS中调试时不能关联源代码问题
  9. 马化腾内部讲座:让产品自己召唤人
  10. 事故通报绝不能一报了事22344