www 被大佬们吊打了,尤其是zac2010>.|

wscqwq

园龄:2年粉丝:2关注:3

[CSP-S2020]儒略日

[CSP-S2020] 儒略日

本题需要掌握正确的方法,不然写起来很麻烦。

在格里高利历中,日期计算以400年为周期,每400年都有恰好146097天。

预处理出400年内的情况,将年份模400即可快速得到答案。

首先从公元前 4713 年 1 月 1 日到公元1年(不含),共 (4713+3)/4+365×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天,又因为第一天不算,所以当 r2299160 就为儒略历。

几个简化代码的技巧:

对于格里高利历,以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年的情况,再查表即可。

代码极短,应该是最好的做法之一。

AC

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17581809.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(213)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起