雙鏈表實現大整數的加法與乘法 VC

2021-04-02 02:46:27 字數 3015 閱讀 4244

由於最近的實驗課老師要求完成大整數的加法與乘法,所以我在網上看到了許多大整數的例子,大部分都是用彙編來完成的.當然這滿足不了我們實驗的要求.所以前天晚上冥思苦想到午夜12點終於找到了解決之道.當然,還是比較膚淺的,vc++高手可以略過閱讀此文.

設計的思想主要是通過雙鏈表來實現的.利用雙鏈表的節點儲存每位的數字,利用前驅進行對上乙個位數的使用.用後繼來連線後面的節點.通過對"+"號和"*"號的過載實現對大整數的加和乘.理論上可以實現n多位的運算,只要你的機器記憶體夠大...程式的重點在於運算子的過載.

本程式主要由三個檔案構成:

biginteger.h 包涵了對節點的結構定義,以及類biginteger的定義.

biginteger.cpp 包涵了biginteger類裡面成員函式的具體內容.

main.cpp 主函式...

//biginteger.h

struct node        //定義了節點的結構

;class biginteger      //定義biginteger 類

;

//biginteger.cpp

#include #include #include "biginteger.h"

biginteger::biginteger()        //建構函式,將每個節點置空.

biginteger::biginteger(const biginteger &bignum)     //拷貝構造

}biginteger::~biginteger()        //析構

head=null;

end=null;

tempnode=null;

}void biginteger::addhead(char num)        //在煉表頭插入節點的操作

else }

void biginteger::addend(char num)       //在鍊錶尾插入節點的操作

else }

void biginteger::getnumber()            //輸入部分 }}

biginteger biginteger::operator + (const biginteger &bignum2)    //過載"+"

else

rest=0;

result.addhead(char(tempnum));          //將結果放置到最終結果煉表裡

temp1=temp1->prev;

temp2=temp2->prev;

} if(temp2)temp1=temp2;

while(temp1)

else

rest=0;

result.addhead(char(tempnum));             //將結果放置到最終結果煉表裡

temp1=temp1->prev;

} if(rest)

result.addhead(char(rest));                //考慮最後的進製是否存在,如果存在則存入鍊錶的首部.

return result;

}biginteger biginteger::operator * (const biginteger &bignum2)     //對*進行過載

else

rest=0;

temp.addhead(char(tempnum));        //存入臨時鍊錶

temp1=temp1->prev;

}  if(rest!=0)temp.addhead(char(rest));

for(int k=i;k>=1;k--)temp.addend(char(0));       //判斷應該在鍊錶後面補幾個0

i++;            //每次乘完後計數,用來下一次的補0

temp1=bignum1.end;             //把被乘數重新置到尾,用來讓乘數下一次去乘每個元素

temp2=temp2->prev;              //將乘數取出鍊錶的前驅

tempa=result.end;                  //下面進行的是將每次乘數與被乘數的相乘結果累加放到最終煉表裡等待輸出

if(result.head!=null)           //下面過程與"+"過載基本一樣,只是多了對臨時鍊錶的置空,所以不在做詳細的注釋.

tempb=temp.end;

rest2=0;

while(tempa!=null && tempb!=null)

else

rest2=0;

result.addhead(char(tempnum));

tempa=tempa->prev;

tempb=tempb->prev;

}  if(tempb)tempa=tempb;

while(tempa)

else

rest2=0;

result.addhead(char(tempnum));

tempa=tempa->prev;

}  if(rest2)

result.addhead(char(rest2));

if(temp.head!=null)

tempb=null;

} return result;

}biginteger biginteger::operator = (const biginteger &bignum)          //對=號進行過載

return *this;

}void biginteger::disp()                    //輸出鍊錶

else return;

while(tempnode)

cout<#include "biginteger.h"

void main()

break;

case 2:

break;

default:break;

}}

JAVA 大整數加法的實現

整數加法 param lv 左值 param rv 右值 param result 相加的結果 數值存放說明 數值的每一位作為棧的一項存放在棧中,從棧底到棧頂依次是數值的高位到低位 演算法描述 輸入的加數倒序存放在棧中 即棧頂是數的最低位,棧底是數的最高位 計算的時候,依次彈出棧中的資料,對每一位執...

單鏈表與有序雙鏈表的實現

單鏈表的實現 描述定義單鏈錶類,建立帶頭結點的單鏈表 節點型別為整型資料 要求包含以下成員函式 頭插法建立單鏈表 利用建構函式實現 尾插法建立單鏈表 過載建構函式實現 鍊錶的遍歷 按值刪除乙個節點 按位置刪除乙個節點 鍊錶的析構 輸入輸入一組資料,以尾插法的形式建立單鏈表 表示輸入結束 構造第乙個鍊...

單鏈表實現 一元多項式的乘法與加法運算

pta 程式設計類實驗輔助教學平台 設計函式分別求兩個一元多項式的乘積與和。輸入格式 輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零...