某月最大天数的最佳算法

这个问题菜农在悟空问答和微博中曾提问过,一直无人解答。

例如今天是2018.1.28 星期日。那么一月的最大天数肯定有31天,这个小孩子也知道。

但这不是算法而是一种查表方法。即一个表格里有12个每月最大天数的数字,但二月有28天和29天之别,这是因为每四年一个闰年的影响。

实际上菜农认为它的最佳算法就两个汉字:周差。

例如某月最大天数是28天时,那么一定和下月今天的星期几一样,即周差为0。

以此类推,29天周差为1,30天周差为2,31天周差为3。

即周差为0到3,也就是28+周差=28到31天。

例如今天是2018.1.28星期日,那么下月2018.2.28星期三。

故周差=星期三-星期日=3,所以本月的最大天数即月底是28+3=31天。

本算法实际隐含了星期公式,而星期公式里已经处理过了闰年问题,故本算法是通用的,而且在网上应用了十数年。

下面几个图是菜农密码工具中几种星期公式的源码图示:

某月最大天数的最佳算法

某月最大天数的最佳算法
某月最大天数的最佳算法​​​


分享到:


相關文章: