宜宾野牛程序员教少儿编程之GESP等级考试相关知识点:计算 N 小时后的日期时间(如何处理闰年、平年、大月、小月及2月)
题目:计算 N 小时后的日期时间
题目描述:
输入一个年份、月份、日期、小时以及一个整数N,表示经过 N 小时后,计算对应的年、月、日、小时。
输入格式:
一个四个整数:
year month day hour
(分别表示当前的年份、月份、日期、小时)。一个整数:
N
(表示经过的小时数,N ≥ 0)。
输出格式:
计算经过 N 小时后的年、月、日、小时,格式为
YYYY-MM-DD HH
。
野牛程序员知识点讲解:
年、月、日与闰年平年
在日常生活中,时间是按照年、月、日进行计算的。其中,一年指地球围绕太阳公转一周的时间,大约为365.2422天。为了方便计算,采用公历(即阳历)来安排每年的天数,并制定了闰年和平年的规则。
闰年与平年
为了让历法更加准确,人们规定:
平年:一年有365天。
闰年:一年有366天,比平年多一天(2月29日)。
判断闰年的规则:
符合以下任一条件的年份是闰年:
能被4整除,但不能被100整除(如:2024年、2028年)。
能被400整除(如:2000年、2400年)。
其他情况均为平年(如:2023年、2100年)。
月份分类
一年共有12个月,不同月份的天数不同:
大月(31天):1月、3月、5月、7月、8月、10月、12月。
小月(30天):4月、6月、9月、11月。
特殊的2月:
平年:28天。
闰年:29天。
2月的特殊性
2月之所以有28天或29天,是因为历法调整的需要。古罗马最初的历法一年只有10个月,后来增加了1月和2月,其中2月被设定为最短的月份,并作为调整年份天数的依据,因此遇到闰年时会增加一天,变为29天。
总结
一年有12个月,分为大月、小月和特殊的2月。
闰年比平年多一天,2月有29天。
闰年规则:能被4整除但不能被100整除,或能被400整除。
了解这些规则,有助于准确计算日期,合理安排时间。
#include <iostream> #include <iomanip> using namespace std; // 判断是否是闰年 bool isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 获取某个月的天数 int getDaysInMonth(int year, int month) { // 大月:31天 if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { return 31; } // 小月:30天 else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } // 2月特殊处理 else if (month == 2) { return isLeapYear(year) ? 29 : 28; } return 0; // 非法月份 } // 计算 N 小时后的时间 void calculateFutureTime(int year, int month, int day, int hour, int N) { hour += N; // 直接加上小时数 // 处理溢出的小时 while (hour >= 24) { hour -= 24; day++; // 处理溢出的日期 if (day > getDaysInMonth(year, month)) { day = 1; month++; // 处理溢出的月份 if (month > 12) { month = 1; year++; } } } // 输出最终结果 cout << setw(4) << setfill('0') << year << "-" << setw(2) << setfill('0') << month << "-" << setw(2) << setfill('0') << day << " " << setw(2) << setfill('0') << hour << endl; } int main() { int year, month, day, hour, N; // 输入数据 cout << "请输入年月日小时(格式:YYYY MM DD HH):" << endl; cin >> year >> month >> day >> hour; cout << "请输入经过的小时数 N:" << endl; cin >> N; // 计算并输出结果 calculateFutureTime(year, month, day, hour, N); return 0; }
示例输入输出
示例 1
输入:
2025 3 24 22 5
输出:
2025-03-25 03
(2025 年 3 月 24 日 22 时后 5 小时是 2025 年 3 月 25 日 03 时)
示例 2(闰年计算)
输入:
2024 2 28 23 26
输出:
2024-03-01 01
(2024 是闰年,2 月有 29 天,经过 26 小时后进入 3 月)

- 上一篇:德牧训练的最佳时间
- 下一篇:一个月的小猫怎么训练大小便