[CSP-S2020]儒略日
[CSP-S2020] 儒略日
本题需要掌握正确的方法,不然写起来很麻烦。
在格里高利历中,日期计算以400年为周期,每400年都有恰好146097天。
预处理出400年内的情况,将年份模400即可快速得到答案。
首先从公元前 4713 年 1 月 1 日到公元1年(不含),共 \((4713+3)/4+365\times 4713=1721424\) 天。
然后从公元1年(含)到1200年(不含)共1199/4+1199*365=437934天。
从公元1年(含)到1582年10月4日(含)共1581//4+1581*365+(31+28+31+30+31+30+31+31+30+4)=2299161天,又因为第一天不算,所以当 \(r\le 2299160\) 就为儒略历。
几个简化代码的技巧:
对于格里高利历,以1200年1月1日为起始日,\(r\) 减去跳过的天数(2159351,首先从开始到1200年1月1日共 \(1721424+437934=2159358\) 天,减去10天不存在的日期(这样 \(r\) 就往后10天 ),然后还有1300、1400、1500的不闰,所以加3天(这样 \(r\) 就往前移动3天,因为这些闰年的那一天在格里高利历并不存在,但在儒略历中存在,而我们将其当作了格里高利历),而对于为什么没有上面的偏差问题,因为是跳过了几日,虽然不算1年1月1日,但是算了1200年1月1日为跳过,所以正好)。
然后对于格里高利历减去2159351,最后算一下400年有几个,加上1200,然后查表得到400年内的情况。
而对于儒略历,就可以直接算掉4年的情况,再查表即可。
代码极短,应该是最好的做法之一。