深入探究后发现,问题出在求余操作上,python和java之间存在细微差别。举个例子,以-7模4为例,两个语言得出的余数结果不相同。我们用数学语言描述这一过程:对于整型数a和b,取模或求余的步骤都是求整数商c和计算模r,即r = a - c*b。区别在于取余运算在求c时向0方向舍入,而取模运算则向...    
python负数求余不正确?——取模 VS 取余
    小王同学在leetcode刷题,用java写了一版代码后,又习惯性地用python写了一版。然而,尽管两版代码逻辑完全一样,当提交答案时,python版本居然提示解答错误!
深入探究后发现,问题出在求余操作上,python和java之间存在细微差别。举个例子,以-7模4为例,两个语言得出的余数结果不相同。
我们用数学语言描述这一过程:对于整型数a和b,取模或求余的步骤都是求整数商c和计算模r,即r = a - c*b。区别在于取余运算在求c时向0方向舍入,而取模运算则向负无穷方向舍入。
进一步推理,计算-7模4时,a = -7,b = 4。求整数商c,c应该是-1.75。进行求模运算时,c值应为-2(向负无穷方向舍入),而求余运算则取c = -1(向0方向舍入)。因此,求模时r = 1,求余时r = -3。
总结:当符号不一致时,取模运算结果的符号与b一致,而求余运算结果的符号与a一致。在主流语言中,如C/C++、C#、JAVA、PHP,%运算符用于求余运算;而python中的%操作符执行取模运算。
扩展知识:维基百科提供了相关解释。
为了直观感受符号不一致时的影响,以下提供两门语言的代码实例:
Java版:
Python版:2024-10-11