我必須撰寫一個使用另一個函式的函式,但另一個函式必須回傳整數,這些整數對于大數來說相當不準確。
我的代碼:
import math
def reduce(n, d):
m = min(n, d)
for i in range(m, 1, -1):
if n%i==0 and d%i==0:
n = n//i
d = d//i
return (n, d)
def almost_square(n, d):
f = n/d
c = math.ceil(f)
n*=c
return reduce(n, d)
def destiny(n, d):
b = n/d
fraction = n, d
while not b.is_integer():
breuk = almost_square(fraction[0], fraction[1])
b = fraction[0]/fraction[1]
return int(b)
函式應該做什么:
減少:只是簡化分數,例如 2/4 變成 1/2
幾乎平方:將分數乘以分數的四舍五入整數
命運:對分數應用幾乎平方,直到它回傳一個整數。
問題是,我的 uni 使用一個為每個函式嘗試 50 個測驗用例的程式,并且只有在每個函式適用于所有 50 個測驗用例時才完成練習,并且他們希望函式“reduce”回傳一個整數元組,但是使那里的數字整數使我的功能“命運”不準確,或者至少我是這么認為的。
所以在 50 個測驗用例中,所有 50 個對函式 reduce 作業,所有 50 個對函式 most_square 作業,但有 5 個函式命運失敗,它們是:
命運(10, 6),我的輸出:1484710602474311424,預期輸出:1484710602474311520 命運(17, 13),我的輸出:59832260230817688435680083968,預期輸出:59832260230861768763414
命運(10,3),我的輸出:1484710602474311424,預期輸出:1484710602474311520命運(15,9),我的輸出:1484710602474311424,預期輸出:1484710602474311520命運(11,5),我的輸出:494764640798827343035498496,預期的輸出:494764640798827359861461484
有什么可以解決這個問題的嗎?
uj5u.com熱心網友回復:
整數不會因大數而變得不準確。浮點數可以。而且您正在使用浮點數。
重寫您的演算法以僅使用整數。
uj5u.com熱心網友回復:
該代碼中有一些浮點運算,可能會稍微偏離結果,顯然它確實如此。忘記浮點數,不要使用任何“浮點數,但更大”的庫,整數算術是要走的路。
例如,
f = n/d
c = math.ceil(f)
n*=c
這段代碼看起來像是在計算n * ?n / d?,但它只是近似計算,因為它使用浮點運算,需要將值四舍五入到最接近的浮點數(例如,int(float(1484710602474311520))是 1484710602474311424)。它應該使用整數算術來實作,例如:
n *= (n d - 1) // d
該destiny函式也不應該使用浮點除法,也不需要。“是b一個整數”測驗可以等效地表述為“d除法n”,它可以用整數算術來實作。
同樣對于reduce您可以使用math.gcd或gcd自己實作的功能,您現在擁有的實作非常慢。
通過這些更改,我得到了您提到的測驗用例的正確結果。我可以展示代碼,但由于它是一個作業,您可能應該自己撰寫代碼。問這個問題已經很冒險了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419881.html
標籤:
