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;
计算模或者余数: 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。

结论

根据例子及推理。得出如下总结:

  1. 当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。

2. 当符号不一致时,结果不一样。求模运算结果的符号和b一致,求余运算结果的符号和a一致。

经过测试,在C/C++, C#, JAVA, PHP这几门主流语言中,%运算符都是做取余运算,而在python中的%是做取模运算。

扩展:维基百科的相关解释

维基百科-模除​zh.wikipedia.org编程语言中,取余和取模的区别到底是什么?​www.zhihu.com

a0040fcd5544e306500a0c9843750529.png

a15ad41edd67a3e57ad34a4ccdac9e87.png

leetcode实例

整数反转 - 力扣(LeetCode)​leetcode-cn.com
a2029568b17ac0b8a083b57fc463e722.png

下面附上两个语言版本的代码实例,大家可以亲身体会下,当除数与被除数符号不一致时一定多多加小心:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14天学会安卓开发(附PDF文档和全部示例代码)

前言: 本人也是菜鸟,老鸟看了此文有哪里不好之处敬请指点,本书是根据<<Android应用开发揭秘>>攒写的,如何把一本书读薄,是一件值得思考的问题.相信看过那本书的都知道有500页,哪里才是重点呢?我来告诉你!本书针对有JAVA基础的孩纸们,基本JAVA基础都没的,赶紧去找2…

scanf的用法

今天上论坛看到有人问的关于C语言代码中的问题&#xff0c;发现出现了在scanf函数中带有\n&#xff0c;记得当年刚开始学得时候&#xff0c;也出现过类似的问题&#xff0c;然后看到有人归纳了scanf的用法&#xff0c;就转载到自己的blog以方便以后可以复习。 ***************…

qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?

- 点击上方“中国统计网”订阅我吧&#xff01;-MySQL备份MySQL中的逻辑备份是将数据库中的数据备份为一个文本文件&#xff0c;备份的文件可以被查看和编辑。在MySQL中&#xff0c;使用mysaldump工具来完成备份。有以下3种来调用mysqldump&#xff1a;1. 备份指定的数据库&…

将系统默认记事本替换成自己喜欢的文本编辑器

找寻了这么长时间的编辑器&#xff0c;感觉还是Notepad2最适合自己了。打开效率快 界面简洁 并且还能直接按Esc进行关闭这个最喜欢了。只是它的图标有点丑。。 下面就记录一下 将Notepad2替换成系统记事本。 首先&#xff1a;我们将notepad2.exe重命名为notepad.exe并复制一份名…

linux系统管理与服务器配置高志君_如何在 Linux 上安装、配置 NTP 服务器和客户端?...

你也许听说过这个词很多次或者你可能已经在使用它了。在这篇文章中我将会清晰的告诉你 NTP 服务器和客户端的安装。-- Magesh Maruthamuthu你也许听说过这个词很多次或者你可能已经在使用它了。在这篇文章中我将会清晰的告诉你 NTP 服务器和客户端的安装。之后我们将会了解 Chr…

latex使用

目录 工具支持中文方法eps图片转换给目录加上超链接修改文字颜色C代码式样超链接工具 首先&#xff0c;推荐使用ubuntu下的图形界面tex编辑工具Kile&#xff0c;同时该工具支持界面的编辑&#xff0c;与pdf文件的生成。 由于我只需要简单的使用tex文件生成pdf&#xff0c;就可以…

8位可控加减法器_行测高分技巧-资料分析之有效数字加减法取舍

资料分析是我们行测试卷中得分率较高的一个部分&#xff0c;所以对资料分析这一部分的题目我们必须把握。但是做题过程中&#xff0c;考生碰到一些数字较大&#xff0c;列式复杂的题目&#xff0c;就无从下手&#xff0c;不知如何应对&#xff0c;今天陕西京佳教育就和各位考生…

《linux c编程指南》学习手记4

7.1 文件系统简介 7.1.1 文件 文件类型&#xff1a;普通文件、目录文件、链接文件、设备文件、管道文件 文件权限&#xff1a;r w x 访问权限&#xff1a;文件所有者、文件所有者同组用户、其他用户 7.1.2 索引节点 7.1.3 文件系统 树形层次结构系统&#xff0c;文件最终都归结…

3层vni vxlan_方便业务迁移,大型企业数据中心VXLAN大二层基础,一分钟了解下

一、VXLAN 简介(1)定义RFC7348 定义了 VLAN 扩展方案 VXLAN(Virtual eXtensible Local Area Network)。VXLAN 采用 MAC in UDP(User Datagram Protocol)封装方式&#xff0c;是 NVO3(Network Virtualization overLayer 3)中的一种网络虚拟化技术。(2)目的作为云计算的核心技术之…

android shape的用法总结

<?xml version"1.0" encoding"utf-8"?><shape xmlns:android"http://schemas.android.com/apk/res/android"> <gradient android:startColor"#c0000000" android:endColor"#c0000000" …

设置dns_网络速度缓慢怎么办?轻松一键修改DNS设置让网速提升五倍

不知道大家有没有这种情况的发生&#xff0c;在家上网或者看智能电视&#xff0c;打开一个普通网页&#xff0c;明明自己办的是100M的宽带&#xff0c;结果慢得要死&#xff0c;还动不动弹出各种各样的广告&#xff0c;然后这时你又杀毒&#xff0c;又去清内存&#xff0c;结果…

C语言学习笔记(1)--基本概念和函数用法

最近开始重新学习C语言&#xff0c;所谓“好记性不如烂笔头”&#xff0c;把一些要记住的基本概念和一些函数用法&#xff0c;无论是书上看到的&#xff0c;或者是在别人的博客和论坛上帖子看到的&#xff0c;都归纳到这篇文章中&#xff1a; 2014-10-12 1、声明和定义。他们…

DNN常用控件总结

DNN常用控件总结 ——DNN 学习 1. Calendar一般属性配置&#xff1a; <dnn:DnnCalendar ID"dcEvent" runat"server" CssClass"Calendar" Skin"Windows7" AutoPostBack"true" DayNameFormat"Short" DefaultC…