前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的模运算

Python中的模运算

作者头像
兜兜转转
发布2023-03-08 13:16:59
1.4K0
发布2023-03-08 13:16:59
举报
文章被收录于专栏:CodeTimeCodeTime

所谓取模运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得 a \% b = a - n * b = m

先测试几个例子:

1234

print(9%5) # 4print(-9%5) # 1print(9%-5) # -1print(-9%-5) # -4

可以看到,数值部分虽然相同,但是正负符号的四种不同组合,会产生完全不同的四种结果。那么这里面有什么规律吗? 实际上,虽然结果不一样,不过取模运算完全遵从统一的规则:

a \% b = a- \lfloor\frac{a}{b}\rfloor * b

其中\lfloor\frac{a}{b}\rfloor表示a除以b的结果向下取整。比如9\%5,先计算\lfloor\frac{9}{5}\rfloor,向下取整得到1,然后计算9-1*5,得到4;

同理-9\%5,先计算\lfloor\frac{-9}{5}\rfloor,向下取整得到-2,然后计算-9-(-2*5),得到1;再来看9\%-5

9 \% -5 = \lfloor\frac{9}{-5}\rfloor = 9-(-2*-5) = -1

最后是-9\%-5

-9 \% -5 = \lfloor\frac{-9}{-5}\rfloor = -9-(1*-5) = -4

虽然知道结果是如何计算出来的,不过人脑不比电脑,这样计算未免太复杂,为避免给大脑增加负担,再根据上面的规则,这里我总结了一个简单的记忆方法:

  1. 对于不带负号的,2个数字都是正数的,直接求结果,这个应该来说是比较简单的,而且无论符号是什么,我们都只计算这个值;
  2. 对于有负号的,不管负号在哪个数字,都去除负号,然后计算步骤1的结果;
  3. 接下来根据负号的位置分为3种情况,假设除数是K,去掉负号后取模的结果是M:
    • 2个数都是负数,直接等于-M
    • 被除数是负数,除数是正数,由于是向下舍入,最后相当于会多加上一个K,也就是说模一定是大于0的,结果是K-M
    • 被除数是正数,除数是负数,刚好相反,结果是M-K,注意这里的K是除数的绝对值,是正数

简单归纳:

  1. 不管有没有负数,先按正数求模得到M
  2. 2个数都为负数,结果是-M
  3. 只有1个数为负数,负数在上,记住结果一定是正的,大数-小数(除数-余数),那么就是K-M
  4. 只有1个数为负数,负数在下,记住结果一定是负的,小数-大数(余数-除数),那么就是M-K

注:此规律的前提是除的结果一定是向下取整,如果你用java去套这个规律会发现完全行不通。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档