-- 最近啊大家都在做万年历,记得小学奥数题里有过标题所写的问题。就直接把公式拿来用了,不少人觉得我这是作弊啊,其实这个公式之前我也是自己先推过的,在这里就说明一下我的思路吧。
首先不仅仅是1990年1月1号是星期一,公元1年1月1日它也是星期一。
然后大家都知道求星期几使用总天数余7 也就是 days%7 为了方便理解可以对结果进行+1。
假如没有闰年一说那么 year年的第一天之前有多少天呢?答案就是
(year-1)365
总结一下公式变成了 星期几=(year-1)365%7+1
有人这时候就要说了最关键的闰年哪去了?好我们先要知道,闰年有366天,也就是比平年多一天,所以只要在原有的基础上加上闰年的数量就好了
闰年的数量为
(year-1)/4-(year-1)/100+(year-1)/400
这个不难理解吧,因为有被100整除不能被400整除的不算闰年。
接下来公式就完成了
星期几=((year-1)365+(year-1)/4-(year-1)/100+(year-1)/400)%7+1
看着长长的公式我们可以优化一下
365=364+1
(year-1)365=(year-1)*364+(year-1)
364/7=52 我们要求余所以前面364那部分可以直接扔了。
公式变为
星期几=(5(year-1)/4-(year-1)/100+(year-1)/400)%7+1
知道了某年第一天星期几的话,后面的月份就可以根据累加计算出来的。
网友评论