python實現無限精度除法運算

2022-08-22 15:33:13 字數 1439 閱讀 5265

原創 2023年11月23日 17:38:11

python3的int支援超大數的乘法運算,但是除法運算貌似還沒有實現無限精度。對於浮點數乘法可以擴大轉換為整數,運算完畢以後再縮小儲存為str,即可實現高精度,但是對於除法,這種方法貌似行不通。

通過思考手算除法的過程,以a/b=c餘r為例,過程如下:

1.a = r*10

2.計算a/b,結果為c餘r

3.把c寫在已經計算出來的結果後面

4.重複1~3步,直到想要的精度

用python實現,**如下:

def hdiv(dividend, divisor, precision=0):  

"""高精度計算除法,沒有四捨五入

@author: cidplp

@param dividend:被除數

@type dividend:int

@param divisor:除數

@type divisor:int

@param precision:小數點後精度

@type precision:int

@return:除法結果

@rtype:str

"""if isinstance(precision, int) == false or precision <0:

print('

精度必須為非負整數

')

return

a =dividend

b =divisor

#有負數的話做個標記

if abs(a+b) == abs(a) +abs(b):

flag = 1

else

: flag = -1

#變為正數,防止取模的時候有影響

a =abs(a)

b =abs(b)

quotient = a //b

remainder = a %b

if remainder ==0:

return

quotient

ans = str(quotient) + '.'

i =0

while i a = remainder * 10quotient = a //b

remainder = a %b

ans +=str(quotient)

if remainder ==0:

break

i += 1

if precision ==0:

ans = ans.replace('

.', ''

)

if flag == -1:

ans = '

-' +ans

return ans

高精度除法 c語言實現

一定要注意高精度除法的實現是需要注意在對求解的陣列的獲取是,是從高位先得到數的,這個過程要模擬真正除法的過程,所以最後這個陣列的長度,必須在進行處理高位的0的時候就提前賦予,不然會出問題,此題還算出了r即是餘數 include includeusing namespace std 減法還需要判斷大小...

python實現 CCF201709 5 除法

試題編號 201709 5 試題名稱 除法時間限制 10.0s 記憶體限制 256.0mb 問題描述 問題描述 小蔥喜歡除法,所以他給了你n個數a1,a2,an,並且希望你執行m次操作,每次操作可能有以下兩種 給你三個數l,r,v,你需要將al,al 1,ar之間所有v的倍數除以v。給你兩個數l,r...

python實現高精度加法

之前一直使用的c c 沒有提供高精度的計算方案,所以大整數的運算都需要手動實現,python已經為我們提供了高精度運算,這裡出於剛學習python作為練習,實現高精度加法運算的原理.高精度加法的過程就是完全模擬列豎式計算的方式,我們開兩個列表,將加數a,假如a 1243,在列表中儲存為 1,2,4,...