高考倒计时
描述
小华想计算一下自己距离高考还有多少天,请你设计一个程序计算出具体天数。
比如:
2022年1月22日 到 2023年1月22日有365天。
2022年1月22日 到 2022年1月23日有1天。(当天日期不计算在内)
2012年1月22日距离2023年2月22日还有4049天。(要考虑闰年的情况)
输入
共两行输入。
第一行:输入三个数据year_1 、 month_1、 day_1,用空格隔开,表示当前日期。
第二行:输入三个数据year_2、month_2、day_2,用空格隔开,表示考试日期。
(当前日期一定早于考试日期)
输出
输出一个行,n表示天数
输入样例 1
2022 1 22 2022 1 23
输出样例 1
1
输入样例 2
2022 1 22 2023 1 22
输出样例 2
365
输入样例 3
2012 1 22 2023 2 22
输出样例 3
4049
#include <iostream>
using namespace std;
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int getDaysInMonth(int year, int month) {
switch (month) {
case 2:
return isLeapYear(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
int daysToEndOfYear(int year, int month, int day) {
int days = 0;
for (int m = month; m <= 12; ++m) {
days += getDaysInMonth(year, m);
}
days -= day;
return days;
}
int daysFromStartOfYear(int year, int month, int day) {
int days = day;
for (int m = 1; m < month; ++m) {
days += getDaysInMonth(year, m);
}
return days;
}
int countDays(int year_1, int month_1, int day_1, int year_2, int month_2, int day_2) {
if (year_1 == year_2) {
return daysFromStartOfYear(year_2, month_2, day_2) - daysFromStartOfYear(year_1, month_1, day_1);
} else {
int days = daysToEndOfYear(year_1, month_1, day_1) + daysFromStartOfYear(year_2, month_2, day_2);
for (int y = year_1 + 1; y < year_2; ++y) {
days += isLeapYear(y) ? 366 : 365;
}
return days;
}
}
int main() {
int year_1, month_1, day_1;
int year_2, month_2, day_2;
cin >> year_1 >> month_1 >> day_1;
cin >> year_2 >> month_2 >> day_2;
cout << countDays(year_1, month_1, day_1, year_2, month_2, day_2) << endl;
return 0;
}