Python 關於整除以及負數取餘遇到的問題

2021-08-29 07:13:21 字數 1613 閱讀 5895

最近在編碼的過程中,在整除以及取餘的時候遇到了一些比較迷的問題,這裡碼一下這些問題,以備日後檢視。

在python3中,除法有 「/」 以及 「//」 兩種,這兩個有著明顯的區別,具體區別看**:

print(12//10)

print(12/10)

這兩行**的輸出如下:

1

1.2

這結果的差別顯而易見。當被除數是負數的時候又是令一種情況:

print(-12/10)

print(int(-12/10))

print(-13//10)

這三條語句的輸出為:

-1.2

-1-2

這裡面就可以發現-13用 「//」 除以10的時候,結果是-2,從結果中我們可以看出,「//」是向下取整,「-1.3」會被取成-2,如果想要得到-1,就需要用「/」,然後將結果強制轉換為int型。

再講到取餘操作,比除法操作更為複雜。

正數的取餘比較直接:

print(123%10)
這裡結果為3。

但是換為負數取餘,情況就有所不同: 

print(-123%10)

print(-123%-10)

7

-3

這裡面第二條是我們一般意義上的取餘操作。這裡也特別標註一下,如果涉及到負數取余要用上述解決辦法。

那麼我們看第一條,結果等於7。這個結果有點讓人摸不到頭腦,不過這個結果與python的底層機制有關。

在python中,取餘的計算公式與別的語言並沒有什麼區別:r=a-n*[a//n]

這裡r是餘數,a是被除數,n是除數。

不過在「a//n」這一步,當a是負數的時候,我們上面說了,會向下取整,也就是說向負無窮方向取整。這也就得到:

-123%10 = -123 - 10 * (-123 // 10) = -123 - 10 * (-13) = 7

這裡還不得不提的是

print(123%-10)
這個情況,結果為:

-7
這個通過公式我們也能清楚地計算出來。

下面列一下各種情況的乙個總結:

print(18//10)

print(12/10)

print(-12/10)

print(12/-10)

print(12//-10)

print(int(-12/10))

print(-13//10)

print(int(-123 % -10))

print(-123%10)

print(-123%-10)

print(123%10)

print(-123 // 10)

print(123%-10)

1

1.2-1.2

-1.2

-2-1

-2-37-3

3-13

-7

負數取餘 整除,Python和C語言的不同

總結一句 python中負數整除,是向負無窮取整,所以導致負數取餘不對 在數學公式中,兩種語言的表示演算法都是一樣的,都是 r a n a n 以上,r是餘數,a是被除數,n是除數。唯一不同點,就是商向0或負無窮方向取整的選擇,c從c99開始規定向0取整,python則規定向負無窮取整,選擇而已。向...

python整除和取餘

向下取整 int 向0取整 正數的取餘比較直接 print 123 10 3這裡結果為3。但是換為負數取餘,情況就有所不同 print 123 10 7 print 123 10 3這裡面第二條是我們一般意義上的取餘操作。這裡也特別標註一下,如果涉及到負數取余要用上述解決辦法。那麼我們看第一條,結果...

關於負數取餘的討論

關於負數的餘數,樓上很多已經闡述了純數學概念上的意義。我想從另乙個角度說說我的看法。先明確一點 我們討論的是 被除數 分子 是負整數,而除數 分母 是正整數的情況。先看乙個例子 17 mod 5 答案一 17 3 5 2 所以餘數是 2 答案二 17 4 5 3 所以餘數是 3 首先,從 純數學 概...