全校网站建设与管理,宁波公司网站首页优化,超简单网页制作模板,天津集团网站建设前天小王同学正在leetcode兴致勃勃的刷题#xff0c;用java写了一版后又习惯性的用python写了一版#xff0c;代码逻辑完全一样#xff0c;但提交答案后居然提示【解答错误】#xff01;经过反复调试#xff0c;发现问题出在涉及求余的地方#xff0c;python和java得出的…前天小王同学正在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 -3python3下的整除与求余7//4 1
-7//4 -2
7//-4 -2
-7//-4 1
7%4 3
-7%4 1
7%-4 -1
-7%-4 -3惊不惊喜意不意外推理我们用简单的数学语言来描述下对于整型数ab来说取模运算或者求余运算的方法都是求整数商 c a/b;计算模或者余数 r a - c*b但是求模运算和求余运算在第一步不同取余运算在取c的值时向0 方向舍入而取模运算在计算c的值时向负无穷方向舍入。那么借助该知识点我们来再次推演下文章开头的例子计算-7 Mod 4 那么a -7b 4第一步求整数商cc应该是-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.comleetcode实例整数反转 - 力扣LeetCodeleetcode-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