P8831 [传智杯 #3 练习赛] 儒略历

· · 题解

简单水个题解

蒟蒻第一次写题解,如果有误,敬请斧正。

首先看题面,这是一道简单的模拟题,就是比较复杂,大致分为三个部分。

Part1 输入

输入是个小难点,看输入,先是日期,再是月份,最后是年份,我们只需要定义一个 flag 来判定在输入什么东西就行了。

具体就是开始 flag 定义为 0,遍历一遍字符串然后发现是字母变为 1,在字母特判一下月份(好长一大段)最后写年份。

Part2 1582 年前的计算

由于 1582 年非常特殊,所以我们把 1582年10月4日 之前和之后分开来计算。

四年是 1461 天,然后对年数取余乘 365 即可。

月份可以定义一个数组存储闰年和平年,然后枚举即可。

日期就直接加上。

Part3 1582 年以后

我们看样例。

有个奇特的样例叫 15OCT1582,输出是 577737

这意味着什么?

意味着我们可以直接以这个为初始值,然后跳过 15 号的计算直接算正常的日期。

具体计算方法和上面差不多。

PS:1582 年前和后的闰年判断是不一样的,如果挂了可能是这个,再挂可能是写的有问题。

//代码不挂了,又臭又长,照这个思路打一遍应该就能过了。