python的%,//运算实现相对月份转换

编程碰到这样一个需求:

将十个月前,五个月后的口语化的月份基于当前月转换为准确的年月。

向后比较好办,比如当前为2019年9月,则五个月后为:

月份为:(9-1+5)%12+1=2

年份为:2019+(9-1+5)//12=2020

其中的-1操作是因为在取余运算时,9月对应的是8。取余运算完了,还得加回去。


向前看起来有点麻烦,当前仍为2019月9月,如果说10个月前,怎么计算呢?先说答案:

月份为:(9-1-10)%12+1=11

年份为:2019+(9-1-10)//12=2018


可以看出两者的公式是一模一样的,原因在于%,//的计算公式。

%的公式:r=a-n*[a//n] 其中a为被除数,n为除数,r为余数

//的公式:向下取整(a/n)

秘密在就于公式:r=a-n*[a//n],他的变形a=n*[a//n]+r,也就是说,无论a是正数或者负数,通过%,//,计算出的商和余数,总是能还原出原先的数。同时余数还总为正值,所以用于上面的月份计算非常方便。

以上相当于实现了十二进制的运算。

扩展一下,使用%,//应该可以实现任何进制的运算。

%,//的使用介绍参考:https://blog.csdn.net/sun___M/article/details/83142126

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 2,672评论 0 5
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,425评论 0 2
  • 小学奥数其实很简单,以下是这六个部分的知识点! 1 第一部分(知识点1-6) 2、年龄问题的三个基本特征: ①两个...
    小一哥阅读 1,370评论 0 3
  • 小学奥数的知识点约 80个,总体上可以分为五大类。数论和行程问题是小 学奥数学习中的重点也是难点。 一、 计算能力...
    ADolphin阅读 8,284评论 1 3
  • 在3.7女生节到来之际,我们学校各大学生组织都为女生准备了庆祝活动。 宜春学院学生会 心语心愿 女生 在卡片上写下...
    高文丽405阅读 270评论 0 1