日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 除数总是提示为0_python负数求余不正确?——取模 VS 取余

發布時間:2023/12/10 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 除数总是提示为0_python负数求余不正确?——取模 VS 取余 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前天小王同學正在leetcode興致勃勃的刷題,用java寫了一版后又習慣性的用python寫了一版,代碼邏輯完全一樣,但提交答案后居然提示【解答錯誤】!

經過反復調試,發現問題出在涉及求余的地方,python和java得出的結果居然不一樣?!

舉個栗子

java的整除與求余

7/4 = 1 -7/4 = -1 7/-4 = -1 -7/-4 = 1 7%4 = 3 -7%4 = -3 7%-4 = 3 -7%-4 = -3

python3下的整除與求余

7//4 = 1 -7//4 = -2 7//-4 = -2 -7//-4 = 1 7%4 = 3 -7%4 = 1 7%-4 = -1 -7%-4 = -3

驚不驚喜,意不意外?

推理

我們用簡單的數學語言來描述下:

對于整型數a,b來說,取模運算或者求余運算的方法都是:
求整數商: c = a/b;
計算?;蛘哂鄶?#xff1a; r = a - c*b
但是求模運算和求余運算在第一步不同,取余運算在取c的值時,向0 方向舍入,而取模運算在計算c的值時,向負無窮方向舍入。

那么借助該知識點我們來再次推演下文章開頭的例子

計算-7 Mod 4
那么:a = -7;b = 4;
第一步:求整數商c,c應該是-1.75,如進行求模運算c = -2(向負無窮方向舍入),求余運算則c = -1(向0方向舍入);
第二步:計算模和余數的公式相同,但因c的值不同,求模時r = 1,求余時r = -3。

結論

根據例子及推理。得出如下總結:

  • 當a和b符號一致時,求模運算和求余運算所得的c的值一致,因此結果一致。
  • 2. 當符號不一致時,結果不一樣。求模運算結果的符號和b一致,求余運算結果的符號和a一致。

    經過測試,在C/C++, C#, JAVA, PHP這幾門主流語言中,%運算符都是做取余運算,而在python中的%是做取模運算。

    擴展:維基百科的相關解釋

    維基百科-模除?zh.wikipedia.org編程語言中,取余和取模的區別到底是什么??www.zhihu.com

    leetcode實例

    整數反轉 - 力扣(LeetCode)?leetcode-cn.com

    下面附上兩個語言版本的代碼實例,大家可以親身體會下,當除數與被除數符號不一致時一定多多加小心:

    Java版

    class Solution {public int reverse(int x) {int rev = 0;while (x != 0) {int pop = x % 10;x /= 10;if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;rev = rev * 10 + pop;}return rev;} }

    Python版

    class Solution:def reverse(self, x: int) -> int:INT_MAX = pow(2,31) - 1INT_MIN = - pow(2,31)rev = 0while x!=0:if x > 0:pop = x%10x = x//10else:pop = x%-10x = -(x//-10)if rev > INT_MAX/10 or (rev== INT_MAX//10 and pop > 7):return 0if rev < INT_MIN/10 or (rev == INT_MIN//10 and pop < -8):return 0rev = rev*10 + pop return rev

    總結

    以上是生活随笔為你收集整理的python 除数总是提示为0_python负数求余不正确?——取模 VS 取余的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。