100 #P1026. *【C++语言:选择结构(if)】逻辑运算符综合 II[判断闰年(升级版)]

*【C++语言:选择结构(if)】逻辑运算符综合 II[判断闰年(升级版)]

Description

【题意】来自题目 [CSP-S 2020 儒略日](/problem.php?id=2584)

我们现行的公历为格里高利历(Gregorian calendar),它是在公元 1582 年由教皇格里高利十三世在原有的儒略历(Julian calendar)的基础上修改得到的。具体而言,现行的公历日期按照以下规则计算:

  1. 公元 1582 年 10 月 15 日(含)以后:适用格里高利历,每年一月 3131 天、 二月 2828 天或 2929 天、三月 3131 天、四月 3030 天、五月 3131 天、六月 3030 天、七月 3131 天、八月 3131 天、九月 3030 天、十月 3131 天、十一月 3030 天、十二月 3131 天。其中,闰年的二月为 2929 天,平年为 2828 天。当年份是 400400 的倍数,或日期年份是 44 的倍数但不是 100100 的倍数时,该年为闰年。
  2. 公元 1582 年 10 月 5 日(含)至 10 月 14 日(含):不存在,这些日期被删除,该年 10 月 4 日之后为 10 月 15 日。
  3. 公元 1582 年 10 月 4 日(含)以前:适用儒略历,每月天数与格里高利历相同,但只要年份是 44 的倍数就是闰年。
  4. 尽管儒略历于公元前 45 年才开始实行,且初期经过若干次调整,但今天人类习惯于按照儒略历最终的规则反推一切 1582 年 10 月 4 日之前的时间。注意,公元零年并不存在,即公元前 1 年的下一年是公元 1 年。因此公元前 1 年、前 5 年、前 9 年、前 13 年……以此类推的年份应视为闰年。

给出一个年份 NN9999N9999-9999\le N\le 9999N0N\ne0),求这一年的天数,其中若 N<0N<0 则表示公元前 N|N| 年。

【输入格式】

一行一个整数 NN

【输出格式】

一行一个整数 xx,表示这一年的天数。

【样例输入1】
1900

【样例输出1】
365

【样例输入2】
2000

【样例输出2】
366