日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/9/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表表示八进制加法c语言,用单链表实现八进制加法操作,恳请大家看看Add( )函数的问题... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓

源碼:

#include

using namespace std;

typedef int DataType;

typedef struct node{

DataType data;

node* next;

}node;

//尾插法構(gòu)造單鏈表

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;

}

}

}

//八進(jìn)制A加八進(jìn)制B,結(jié)果存在鏈表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等長(zhǎng)

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中的最后一個(gè)結(jié)點(diǎn)元素和B中同位置的元素相加后對(duì)8取余,并將余數(shù)放入A中的最后一個(gè)結(jié)點(diǎn)的數(shù)據(jù)域。

p->data=sum%8;

//記錄好此時(shí)p、q所分別指向的結(jié)點(diǎn)元素相加后是否有進(jìn)位。

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長(zhǎng)

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短,最后又有進(jìn)位,那結(jié)果一直都不對(duì)(一直比正確結(jié)果多個(gè)1)。其余情況正常。看著像是Add( )函數(shù)中A比B短這種情況的問題,但找了半天沒找到邏輯上哪有問題。

//八進(jìn)制A加八進(jìn)制B,結(jié)果存在鏈表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等長(zhǎng)

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中的最后一個(gè)結(jié)點(diǎn)元素和B中同位置的元素相加后對(duì)8取余,并將余數(shù)放入A中的最后一個(gè)結(jié)點(diǎn)的數(shù)據(jù)域。

p->data=sum%8;

//記錄好此時(shí)p、q所分別指向的結(jié)點(diǎn)元素相加后是否有進(jìn)位。

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長(zhǎng)

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;

}

}

}

總結(jié)

以上是生活随笔為你收集整理的链表表示八进制加法c语言,用单链表实现八进制加法操作,恳请大家看看Add( )函数的问题...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。