大整數減法(超過整型的表示範圍)

2022-09-18 23:39:14 字數 1522 閱讀 6935

演算法思想:預處理輸入的整數字串,去掉開頭的『0』,然後減法操作,減法操作過程中,如果被減數小於減數,則交換兩個數 賦值給被減數和減數變數,始終保持 大數減小數。最後 再 根據 是否交換賦值 來 確定正負。

**實現:

1 #include2 #include

3using

namespace

std;45

//去掉字元開頭的0

6void processstr(string &str)717

18//

減法函式實現

19void bigintsubtract(string stra,int lena,string strb,int lenb,char* res,int

lenres)

2028 invaildinput=false;29

30//

確定減數和被減數

31string subtrahend=stra;//

被減數32

string subtracter=strb;//

減數33

34if(lenb>lena)

3539

if(lena==lenb)//

長度相等時,判斷大小

4046

else

if(stra4751

else

52return;53

}5455//

減法運算

56int lenl=subtrahend.size();

57int lens=subtracter.size();

58int flag=0;//

標記是否借位

59int num=0;//

存放減法操作中間數

6061

int il=lenl-1,is=lens-1,ir=lenres-2;//

注意 ir的初始值,因為 下標和\0

62for(;il>=0&&is>=0&&ir>=0;il--,is--,ir--)

6370

else

717576}

7778

if(1==flag)//

中間出現借位,12345-789這種情況

79 res[ir--]=subtrahend[il--]-flag;

8081

while(il>=0)//

長的減短的,長的剩餘部分直接拷貝

8285

86if(subtrahend==strb)//

交換存放,即為負

87 res[ir]='-'

;88else res[ir]='+'

;8990return;91

}9293void

main()

94128

129 cout<<"

the result is:

"130 system("

pause");

131return

;132 }

原碼,反碼,補碼的表示範圍總結

小數 x0 x1x 2x3 xn,x 0是符號 位 整數 x0x 1x2x 3 xn x0是 符號位 首先形成的概念是 原碼和反碼小數表示的範圍是一樣的,僅僅是二進位制的儲存不同罷了。更有趣的是它們的儲存範圍是關於零點對稱的!原碼小數,反碼小數都是 1 2 n x 1 2 n 中間是 0 0 兩種x...

C語言中資料型別的表示範圍

問題 sizeof int 2,int的表示範圍為什麼是 2 15 2 15 1?答 對於有符號數,最高位為符號位。二進位制原碼最大值為0111111111111111 2 15 1,最小值為 1111111111111111 2 15 1 而0分為 0和 0,即0000000000000000和 ...

浮點數的表示 基本格式 規格化 表示範圍

浮點數表示法是指以適當的形式將比例因子表示在資料中,讓小數點的位置根據需要而浮動。這樣,在位數有限的情況下,既擴大了數的表示範圍,又保持了數的有效精度。階碼 階碼是整數,階符和 m 位階碼的數值部分共同反映浮點數的表示範圍及小數點的實際位置,常用移碼或補碼表示。ieee754標準中採用移碼的表示形式...