大整數的四則運算 減法

2021-10-03 17:15:50 字數 2178 閱讀 7920

題目:輸入兩個正整數num1,num2。(0在前面的大整數的加法裡已經分析過(大整數的四則運算----加法),所以話不多說,直接上重點。還是對應位之間的運算,但是減法不同於加法,加法具有交換律,所以兩個數哪個在前哪個在後都無所謂。但減法卻不行,所以為了計算,我們首先要知道num1,num2到底哪個大?所以需要乙個比較函式,如下。

code:

int

compare

(string s1, string s2)

//s1>s2 返回2; s1

return0;

}}

然後開始實現減法運算,第一步,(補齊),不再贅述。第二步,交換,我們要始終讓sum1裡儲存大的那個數,sum2裡放小的,這邊便於下面的迴圈遍歷。所以根據前面的比較函式,進行可能的交換。如下。

code:

int len = num1.

length()

- num2.

length()

, flag =

compare

(num1, num2)

;(flag ==1)

//始終讓num1>num2

然後就是最重要的迴圈遍歷實現減法了,在這一步裡模擬加法,思想相同,但細節不同。加法會產生可能的進製,但是減法可能需要借位。(想必大家都能理解),所以仍然需要定義乙個mod,如果需要借位,mod賦值-1,否則是0。如下。

code:

int mod =0;

//借位

string ans = num1;

for(

int i = num1.

length()

-1; i >=

0; i--

)//總是num1-num2

else

}

最後一步,細節處理,與加法時相同,需要處理掉前面多餘的0。(注意:實現減法前,我們已經手動讓sum1>sum2,所以在實行最後一次減法時,一定不會「借位」。)但是正是由於交換,所以最後需要根據flag判斷得到的結果是正還是負,如果是負數,需要額外加 『-』,如下。

code:

char tempans[

1000];

int k =

0, pos =0;

for(

int i =

0; i < ans.

length()

; i++)}

tempans[k]

='\0'

; string finalans = tempans;

if(flag ==1)

finalans =

'-'+ finalans;

完整(函式)code:

int

compare

(string s1, string s2)

//s1>s2 返回2; s1

return0;

}}string substr

(string num1, string num2)

else

if(len <0)

if(flag ==1)

//始終讓num1>num2

int mod =0;

//借位

string ans = num1;

for(

int i = num1.

length()

-1; i >=

0; i--

)//總是num1-num2

else

}char tempans[

1000];

int k =

0, pos =0;

for(

int i =

0; i < ans.

length()

; i++)}

tempans[k]

='\0'

; string finalans = tempans;

if(flag ==1)

finalans =

'-'+ finalans;

if(pos)

return finalans;

else

return

"0";

}

大整數四則運算

儲存方式 規定 整數的高位儲存在陣列的高位,整數的低位儲存在陣列的低位。例如 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 ...