原創 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,...