% 在不同语言中表现
在java,c,C++ 中 '%' 是取余运算,正负数取余符号与被除数符号一至就可以,好理解。
而在python 中 % 在处理正数取余时是稳定的,当出现负数情况就不确定了。
在此之前需强调一点: 取余 & 取模
取模和取余的区别:
取余: 取余运算求商时,向0方向舍入
取模: 取模运算求商时,向负无穷方向舍入
也就是说取余运算是为了让商可能小,而取模运算时为了让商尽可能大(绝对值小)
以(-7)%4为列;
取余: 先求商: 向0方向舍进为-1, 余数=被除数 -(除数 * 商 ),结果为-3 。
取模(mod): 先求商: 向负无穷方向舍进为-2,mod=被除数 -(除数 * 商 ),结果为1。
print((-7)%4)
用python运行这行代码,结果为1 ,可见在python中 ‘ % ’是取模运算,在用做题时求余数,当样列出现负数就要十分小心。
为什么会出现取余和取模两种算法?
取余运算和取模运算时为了适应不同数学和计算机领域的需求:
取余是基于算数运算概念,比较直观和自然,结果符号和被除数符号一致,应用在数学计算中。
取模是基于计算机领域概念,结果符号和除数符号保持一致,应用于处理哈希等问题上。
那么在python中如和进行取余运算呢?
其实自己写一个函数就可以了,python的 int()函数就是向0方向靠近的,这样就很方便了。
def yushu(num1, num2):
shang = int(num1 / num2)
res = num1-(num2*shang)
return res
当然,如果其他语言需要取模(mod)只需对商进行向上或向下取整就可以实现(就不演示了)