課程題目:
設計乙個程式實現兩個任意長的整數求和運算。
要求:利用雙向迴圈鍊錶實現長整數的儲存,每個節點含有乙個整型變數。 輸入形式按照中國對於長整數的表示習慣,沒四位一組,組間用逗號隔開。
思路:
為了達到上面的要求,我使用鍊錶將長整數按照四位一組進行輸入(每組用乙個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,所以空間複雜度不...