有鍊錶實現長整數的加法

2021-04-12 21:55:43 字數 3428 閱讀 2605

課程題目:

設計乙個程式實現兩個任意長的整數求和運算。

要求:利用雙向迴圈鍊錶實現長整數的儲存,每個節點含有乙個整型變數。 輸入形式按照中國對於長整數的表示習慣,沒四位一組,組間用逗號隔開。

思路:

為了達到上面的要求,我使用鍊錶將長整數按照四位一組進行輸入(每組用乙個int表示就可以了)。然後對鍊錶中的數字進行加法運算。

加法運算中心思想:先比較長度,以確定哪個數減去哪個數。組與組之間採用萬進製,並且設立進製數,借位數,從而實現以上要求。

**如下:

#include

#include

#include

#include

typedef int datatype;

//------------------

/*定義節點*/

typedef struct node

dslnode;

//------------------

/*迴圈雙向鍊錶的初始化*/

void listinisiate(dslnode **head)

//------------------

/*插入運算*/

int listinsert(dslnode *head,int i,datatype x)

if(j!=i)

if((s=(dslnode *)malloc(sizeof(dslnode)))==null)exit(0);

s->data=x;

s->prior=p->prior;

p->prior->next=s;

s->next=p;

p->prior=s;

return 1; }

//--------------------------

/*求當前迴圈雙向鍊錶的長度*/

int listlength(dslnode *head)

return length; }

//-------------------

/*讀取輸入的數字*/

int inputnumber(dslnode *head)

else if(input>=0&&i==0)

else listinsert(head,i,input);

i++;

if(c==';')break;

scanf("%d%c",&input,&c); }

return 1; }

//-------------------

/*從表尾輸出資料元素*/

void outputnumber(dslnode *head,int sign)

else if(head_3->data<100)

else if(head_3->data<1000)

else

printf(",%d",head_3->data);

head_3=head_3->prior; }

printf("/n/n"); }

//------------------

/*長整數的加運算*/

int longintadd(dslnode *head1,dslnode *head2,dslnode *head3)

else if(p->datadata)

else }

if(p==head1)//一直到了表尾還是相同,則說明這兩個數相同

else if(mark==1)

listinsert(head3,i,data);

i++;

p=p->prior;

q=q->prior; }

outputnumber(head3,head1->data); }

else if(mark==2)

listinsert(head3,i,data);

i++;

q=q->prior;

p=p->prior; }

outputnumber(head3,head2->data); }

}else if(length1>length2)

listinsert(head3,i,data);

i++;

p=p->prior;

q=q->prior; }

while(p!=head1)

if(p==head1->next)

else

listinsert(head3,i,data);

p=p->prior;

i++; }

outputnumber(head3,head1->data); }

else if(length1next!=head2)

q=q->next;//將鍊錶的當前指標指到表尾

while(p->next!=head1)

p=p->next;//將鍊錶的當前指標指到表尾

while(p!=head1)

listinsert(head3,i,data);

i++;

p=p->prior;

q=q->prior; }

while(q!=head2)

if(q==head2->next)

else

listinsert(head3,i,data);

q=q->prior;

i++; }

outputnumber(head3,head2->data); }

}else //同號的情況

listinsert(head3,i,data);

i++;

p=p->prior;

q=q->prior; }

if(p==head1&&q==head2)//等長的情況

outputnumber(head3,head2->data); }

else if(p==head1) //q的長度大於p的長度

listinsert(head3,i,data);

i++;

q=q->prior; }

if(carry!=0)//有進製

outputnumber(head3,head2->data); }

else//無進製

outputnumber(head3,head2->data); }

}else//p的長度大於q的長度

listinsert(head3,i,data);

i++;

p=p->prior; }

if(carry!=0)//有進製

outputnumber(head3,head2->data); }

else//沒有進製

outputnumber(head3,head1->data); }

}} return 1; }

int main()

}

用python實現長整數加法

問題描述 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述 由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義乙個陣列a,a 0 用於儲存a的個位,a 1 用於儲存a的十位,依此類推。同樣可以用乙個陣列b來儲存b。計算c ...

鍊錶實現大數加法

標籤 演算法 你的任務是完成一條能實現加法功能的單向鍊錶,需要實現的函式在標頭檔案已給出。假如現在有 123 與 234 兩個數字,那麼他們在鍊錶中的儲存結構將會是 3 2 1與 4 3 2 注意到這裡的鍊錶只允許從前端插入,你也可以把這個特殊的鍊錶當做棧來處理。輸入的數字不會有負數且不會有前導0的...

判斷單向鍊錶是否有環,環起點,環長,鍊錶長

一 判斷單向鍊錶是否有環 方法1 設定乙個hashset,順序讀取鍊錶中的節點,判斷hashset中是否有該節點的唯一標識 id 如果在hashset中,說明有環 如果不在hashset中,將節點的id存入hashset。這種方法時間複雜度已經最優,但是因為額外申請了hashset,所以空間複雜度不...