大整數的四則運算

2021-10-08 04:21:33 字數 2115 閱讀 6216

int 表示的資料範圍有限,當涉及大整數的運算時候,我們就只能借助陣列來儲存,借助陣列就依靠手工加減乘除,就小學學的那種來運算,然後乙個個存入。

先來個結構體bign,含有乙個陣列和陣列長度。我們用字串讀入的數字可以存入bign。頭尾顛倒存入,因為模擬手工加減乘這三個都是從低位開始的,顛倒後方便操作

bign change

(char str)

return a;

}

加法
bign add

(bign a, bign b)

if(carry !=0)

return c;

}

減法

記得去掉前面的多餘的0。

bign sub

(bign a, bign b)

c.d[c.len++

]= a.d[i]

- b.d[i];}

while

(c.len -

1>=

1&& c.d[c.len -1]

==0) c.len--

;//刪除除個位上的0

return c;

}

乘法(高精度與低精度)

乘法與手工乘法有些不同,他是把被乘數當成了乙個整體,所得個位數做該位結果,高位部分作為新的進製。

然後乘法進製可能不止一位了。用while

前面bign 後面int

bign multi

(bign a,

int b)

while

(carry !=0)

return c;

}

除法(高精度與低精度)

是餘數和除數相除,注意從尾部開始計算,也要除去多餘的0

前面bign 後面int

bign divide

(bign a,

int b,

int& r)

}while

(c.len -

1>=

1&& c.d[c.len -1]

==0)return c;

}

全部**奉上

//找質數,找能除的質數

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

struct bign };

bign change

(char str)

return a;

}int

compare

(bign a, bign b)

return0;

}}bign add

(bign a, bign b)

if(carry !=0)

return c;

}bign sub

(bign a, bign b)

c.d[c.len++

]= a.d[i]

- b.d[i];}

while

(c.len -

1>=

1&& c.d[c.len -1]

==0) c.len--

;//刪除除個位上的0

return c;}//

bign multi

(bign a,

int b)

while

(carry !=0)

return c;

}bign divide

(bign a,

int b,

int& r)

}while

(c.len -

1>=

1&& c.d[c.len -1]

==0)return c;

}void

print

(bign a)

}int

main()

大整數四則運算

儲存方式 規定 整數的高位儲存在陣列的高位,整數的低位儲存在陣列的低位。例如 235813,則d 0 3,d 1 1,d 2 8.此方式以此類推。但注意 通常輸入為字串str 0 2 str 1 3 str 2 5 讀入之後需要反轉一下。加法運算 模板 include include struct ...

大整數四則運算

電腦可以處理很大的數。但是更大的數字運算由於資料型別占有的有限並不能表示出來,所以需要對很大的數字進行大整數處理,光是聽著就感覺令人心潮澎湃呢。核心思想 陣列存數,乙個單元存一位 下面是大整數儲存,比較的模板 struct bign bign change char str return a 比較兩...

大整數的四則運算

由小學時候的加法運算可以歸納出對其中一位進行加法的步驟 將該位上的兩個數字和進製相加,得到的結果取個位數作為該位結果,取十位數作為新的進製。高精度加法的做法與此完全相同,可以直接來看實現的 程式 include include 定義乙個結構體儲存大整數 struct bign 將整數轉換為bign ...