2503. 岁律更新:天道历法测算
1000ms
256MB
简单
题目描述
天元 2022 年 1 月 1 日,适逢**土曜**(星期六),万象更新。在仙界历法中,每一天的流转都遵循严密的规则。
现给定未来的某一天(年、月、日),请你通过法阵演算,计算出这一天与“天元 2022 年 1 月 1 日”**相差多少天**,并推算出那一天是**星期几**。
**注意:**
1. 相差天数定义:今天与明天相差 1 天。
2. 星期表示:星期一至星期日分别使用整数 `1 ~ 7` 表示。
3. 历法规则:需考虑闰年(2 月有 29 天)与平年(2 月有 28 天)的差异。
- 闰年判定:年份能被 4 整除且不能被 100 整除,或者能被 400 整除。
输入格式
- 三个正整数,使用空格隔开,分别表示年、月、日。
- 数据保证输入的日期是合法的,且一定在 2022 年 1 月 1 日之后。
输出格式
- 第一行:一个正整数,表示相差的天数。
- 第二行:星期的数字值,并在其前加符号 `*`(例如星期四输出 `*4`)。
样例 1
输入 (Input)
输出 (Output)
1. **分段累加法**:
- **跨年累加**:先计算从 2022 年到目标年份前一年($year-1$)的总天数。平年加 365,闰年加 366。
- **跨月累加**:计算目标年份中,从 1 月到目标月份前一月($month-1$)的总天数。需根据该年是否为闰年确定 2 月的天数。
- **当日累加**:加上目标日期的天数 $day$,再减去初始日期的 1 天(因为 1 月 1 日是起始点)。
2. **星期推算**:
- 初始日期是星期六(6)。
- 目标星期 = `(6 + 相差天数 - 1) % 7 + 1`。
- *技巧提示*:在处理星期 7(周日)时,注意取模运算的逻辑,确保结果在 $1 \sim 7$ 之间。
3. **数据范围**:年份可能较大,累加天数建议使用 `int` 或 `long long`。
› 输入 stdin
CtrlShiftEnter
‹ 输出 stdout
错误 stderr
操作成功