當前位置:編程學習大全網 - 編程語言 - 內部乘法編程

內部乘法編程

//?這個程序主要由三個文件組成:

//?BigInteger.h?包括節點結構的定義和BigInteger類的定義。

//?BigInteger.cpp?包含BigInteger類中成員函數的具體內容。

//?main.cpp?主要功能...

/*********************************************************/

//BigInteger.h

struct?Node//定義節點的結構。

{

夏爾?Num

節點?*Prev,* Next

};

班級?BigInteger//定義BigInteger?種類

{

節點?*Head,*End,* TempNode

作廢?AddHead(char?num);

作廢?加數(char?num);

公共:

big integer();

BigInteger(const?BigInteger?& ampBigNum);

作廢?get number();

作廢?disp();

BigInteger?接線員?+?(const?BigInteger?& ampBigNum);

BigInteger?接線員?*?(const?BigInteger?& ampBigNum);

BigInteger?接線員?=?(const?BigInteger?& ampBigNum);

~ big integer();

};

//BigInteger.cpp

#包含?& ltiostream.h & gt

#包含?& ltstdio.h & gt

#包含?" BigInteger.h "

BigInteger::BigInteger()//構造函數,使每個節點為空。

{

Head = End = TempNode = NULL

}

BigInteger::BigInteger(常量?BigInteger?& ampBigNum)?//復制結構

{

節點?* p;

Head = End = TempNode = NULL

p=BigNum。頭;

while(p)

{

加數。num);

p = p-& gt;接下來;

}

}

BigInteger::~BigInteger()//析構函數

{

節點?* NextNode

if(Head==NULL)

返回;

TempNode = Head

while(臨時節點)

{

next node = TempNode-& gt;接下來;

刪除?TempNode

TempNode = NextNode

}

Head = NULL

End = NULL

TempNode = NULL

}

作廢?BigInteger::AddHead(char?Num)//在鏈表的頭部插入壹個節點

{

TempNode=new?節點;

TempNode-& gt;Num = Num

TempNode-& gt;Prev = NULL

如果(!頭)

{

Head = End = TempNode

TempNode-& gt;Next = NULL

}

其他

{

TempNode-& gt;下壹個=頭;

head->;Prev = TempNode

Head = TempNode

}

}

作廢?BigInteger::AddEnd(char?Num)?//在鏈表的末尾插入壹個節點

{

TempNode=new?節點;

TempNode-& gt;Num = Num

TempNode-& gt;Next = NULL

如果(!頭)

{

Head = End = TempNode

TempNode-& gt;Prev = NULL

}

其他

{

TempNode-& gt;Prev = End

end->;Next = TempNode

End = TempNode

}

}

作廢?BigInteger::GetNumber()//輸入部分

{

夏爾?關鍵;

int?count=0,num = 0;

while((key=getchar())!=10)//判斷輸入是否為回車,如果不是,將內容從後往前放入鏈表。

{

if(key & gt;='0'?& amp& amp?key & lt='9')

{

num = key-' 0 ';

加數(數字);

num = 0;

}

}

}

BigInteger?BigInteger::運算符?+?(const?BigInteger?& ampBigNum2)//重載"+"

{

BigInteger?& ampBigNum1=*this,result

節點?*temp1,* temp2

int?TempNum,rest = 0;

temp1=BigNum1。結束;//將臨時鏈表的第壹個地址放在輸入鏈表的末尾。

temp2=BigNum2。結束;

while(temp1?& amp& amp?溫度2)

{

TempNum = int(temp 1->;num)+int(temp 2->;num)+休息;?//在節點中添加元素並添加進位剩余。

if(TempNum & gt;9)//判斷加法結果是否會產生進位。

{

TempNum = TempNum-10;

rest = 1;

}

其他

休息= 0;

結果。AddHead(char(TempNum));//將結果放入最終結果鏈表中。

temp 1 = temp 1->;Prev

temp 2 = temp 2-& gt;Prev

}

if(temp 2)temp 1 = temp 2;

while(temp1)

{

int(TempNum)= int(temp 1-& gt;num)+休息;?//節點中的元素加上進位剩余

if(TempNum & gt;9)

{

TempNum = TempNum-10;

rest = 1;

}

其他

rest = 0;

結果。AddHead(char(TempNum));?//將結果放入最終結果鏈表中。

temp 1 = temp 1->;Prev

}

如果(休息)

結果。AddHead(char(rest));//考慮最後壹個進位是否存在,如果存在,存儲在鏈表的頭。

回歸?結果;

}

BigInteger?BigInteger::運算符?*?(const?BigInteger?& ampBigNum2)?//過載*。

{

BigInteger?& ampBigNum1=*this,temp,result

節點?*temp1、*temp2、*tempa、* tempb

int?TempNum,rest,i=0,rest 2;

temp1=BigNum1。結束;

temp2=BigNum2。結束;

而(temp2)//是否將被乘數的每壹位相乘,是通過乘數的有無來判斷的。

{

rest = 0;

while(temp1!=空)

{

TempNum = int(temp 1->;num)* int(temp 2-& gt;num)+休息;

if(TempNum & gt;9)

{?

rest = TempNum/10;?//通過乘法結果與10的商得到進位。

TempNum = TempNum % 10;?//將乘法結果和10進行調制,得到壹個比特。

}

其他

rest = 0;

在…之時AddHead(char(TempNum));//存儲在臨時鏈表中

temp 1 = temp 1->;Prev

}

如果(休息!=0)溫度。AddHead(char(rest));

for(int?k = I;k & gt=1;k -)溫度。加數(char(0));?//判斷鏈表後面要加幾個零。

i++;//每次相乘後計數,下次用它補0。

temp1=BigNum1。結束;?//將被乘數復位到底,這樣下次乘數就可以把每個元素相乘了。

temp 2 = temp 2-& gt;Prev//從鏈表的前壹個取出乘數。

tempa =結果。結束;//下面是把每個乘數和被乘數的乘法結果累加起來,放到最後的鏈表中輸出。

如果(結果。頭!=NULL)?//以下過程與“+”重載基本相同,只是臨時鏈表為空,不做詳細註釋。

{

結果。End =溫度。頭;

結果。Head = NULL

}

tempb =溫度。結束;

rest 2 = 0;

而(tempa!=NULL?& amp& amp?tempb!=空)

{

TempNum = int(tempa-& gt;num)+int(tempb-& gt;num)+rest 2;

if(TempNum & gt;9)

{

TempNum = TempNum-10;

rest 2 = 1;

}

其他

rest 2 = 0;

結果。AddHead(char(TempNum));

tempa = tempa-& gt;Prev

tempb = tempb-& gt;Prev

}

if(tempb)tempa = tempb;

白色(tempa)

{

int(TempNum)= int(tempa-& gt;num)+rest 2;

if(TempNum & gt;9)

{

TempNum = TempNum-10;

rest 2 = 1;

}

其他

rest 2 = 0;

結果。AddHead(char(TempNum));

tempa = tempa-& gt;Prev

}

if(剩余2)

結果。AddHead(char(rest 2));

如果(溫度。頭!=空)

{

在…之時End =溫度。頭;

在…之時Head = NULL

}

tempb = NULL

}

回歸?結果;

}

BigInteger?BigInteger::運算符?=?(const?BigInteger?& ampBigNum)//重載=符號

{

如果(this = = & ampBigNum)

回歸?*這個;

節點?* p;

TempNode = Head = End = NULL

p=BigNum。頭;

while(p)

{

加數。num);

p = p-& gt;接下來;

}

回歸?*這個;

}

作廢?BigInteger::disp()//輸出鏈表

{

如果(頭)

{

cout & lt& ltint(Head->;num);

TempNode = Head-& gt;接下來;

}

不然呢?返回;

while(臨時節點)

{

cout & lt& ltint(TempNode-& gt;num);

TempNode = TempNode-& gt;接下來;

}

cout & lt& ltendl

}

//main.cpp

#包含?& ltiostream.h & gt

#包含?" BigInteger.h "

作廢?主()

{

BigInteger?BigNum1,BigNum2,BigNum3

int?c;

cout & lt& lt"選擇您要執行的操作:"

cout & lt& lt"1.大整數加法運算”

cout & lt& lt"2.大整數乘法”

cout & lt& lt"選擇您需要執行的操作:"

CIN & gt;& gtc;

開關(c)

{

案子?1:

{?

cout & lt& lt"答:" & lt& ltendl

BigNum1。get number();

cout & lt& lt" B:" & lt;& ltendl

BigNum2。get number();

bignum 3 = bignum 1+bignum 2;

cout & lt& lt"加法的結果是:"

big num 3 . disp();

}破;

案子?2:

{

cout & lt& lt"答:" & lt& ltendl

BigNum1。get number();

cout & lt& lt" B:" & lt;& ltendl

BigNum2。get number();

bignum 3 = bignum 1 * bignum 2;

cout & lt& lt"乘法的結果是:"

big num 3 . disp();

}破;

默認:break

}

}

  • 上一篇:EndNote 的使用
  • 下一篇:用VHDL語言編(***八個)七段數碼管的隨機顯示程序
  • copyright 2024編程學習大全網