我做了一個程式來將兩個大數相乘,但沒有得到預期的結果
當我使用我的程式時結果(“ 1131231231231231232132176453243264237453265745327432747324575342321321321324234234324234243242343213 ”,“ 32422344 ” 23423423424242434234234
我得到了 3667838920001082329580291288441145791080382201626879559138562006502209700363203527339095217292763913228365618564016855268114
但是當我在python中直接將這些數字相乘時,我得到 11312312312312312321321764532432642374532657453274327473245753423213213213242321321324234243242343213 * 3242342324234
36678389200010821671845905259736932044690839652084838267964049500518457080907510873842042169260155566708509125117725950778994
兩者是不同的。
def Result(val1,val2):
array = []
offset = "1"
for x in range(len(val1)-1,-1,-1):
result = MultiplyTwoNum(val1[x], val2)
result = MultiplyTwoNum(offset, result)
offset = MultiplyTwoNum("10", offset)
array.append(result)
#print(result)
return array
def MultiplyTwoNum(VAL1,VAL2):
Val1Int = int(VAL1)
#print(Val1Int)
ValResult = ""
ValCarry = 0
FinalResult = ""
for i in range(len(VAL2)-1,-1,-1):
Val2Int = int(VAL2[i])
ValResult = (Val1Int * Val2Int) ValCarry
ValLeftValue = ValResult%10
ValCarry = int(ValResult/10)
FinalResult = str(ValLeftValue) FinalResult
if i == 0:
FinalResult = str(ValCarry) FinalResult
return FinalResult
num = Result(Num1,Num2)
r = 0
for i in num:
r = r num
print(r)
uj5u.com熱心網友回復:
這個無辜的表情:
int(ValResult/10)
是錯的。
從int()
周圍的除法來看,您已經知道在 Python 3 中兩個整數之間的除法會產生一個浮點數。但是int()
繞過它不起作用,為時已晚,損壞已經造成:ValResult
已經轉換為浮點數,可能四舍五入。當用小值(轉換為浮點數時不會四舍五入)進行測驗時,這個解決方案似乎可以作業,但在認真使用時它并不成立。
使用整數除法:
ValResult // 10
如果我在您的代碼中進行更改,就會出現正確的結果,至少對于問題中的特定數字。
也許它的意圖ValResult
總是很小,在這種情況下int(ValResult/10)
有點合理(但你也可以寫ValResult // 10
)。但是,它不會像那樣作業。ValResult
確實可以是一個很大的數,因為MultiplyTwoNum(offset, result)
,其中offset
可能是十的大冪。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/507868.html
標籤:Python python-3.x 细绳 数学 乘法
上一篇:從其css屬性訪問div