编写程序,输入2个日期,输出2个日期间间隔的天数。 注意: 1.需要合理使用以下结构体 struct SDate //日期 { int year; int month; int day; }: 2.输入输出如下所示,第1行为输入,数据间用半角空格分隔,第2行为输出,格式错误算结果错误。 2000-1-1 2022-3-15 8109
时间: 2023-12-03 20:45:26 浏览: 31
下面是一个 C++ 的程序实现:
```cpp
#include <iostream>
using namespace std;
struct SDate {
int year;
int month;
int day;
};
// 判断是否为闰年
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
// 计算某个月的天数
int getDaysOfMonth(int year, int month) {
static int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year)) {
return 29;
} else {
return days[month - 1];
}
}
// 计算两个日期之间的天数
int getDaysBetween(SDate date1, SDate date2) {
int days = 0;
if (date1.year > date2.year || (date1.year == date2.year && date1.month > date2.month) ||
(date1.year == date2.year && date1.month == date2.month && date1.day > date2.day)) {
swap(date1, date2);
}
// 先计算中间整年的天数
for (int year = date1.year + 1; year < date2.year; year++) {
if (isLeapYear(year)) {
days += 366;
} else {
days += 365;
}
}
// 计算 date1 到所在年底的天数
for (int month = date1.month; month <= 12; month++) {
days += getDaysOfMonth(date1.year, month) - date1.day + 1;
date1.day = 1; // 月份变化后,日期变为1
}
// 计算 date2 到所在年初的天数
for (int month = 1; month < date2.month; month++) {
days += getDaysOfMonth(date2.year, month);
}
days += date2.day - 1; // date2 到所在月初的天数
return days;
}
int main() {
SDate date1, date2;
char ch;
cin >> date1.year >> ch >> date1.month >> ch >> date1.day;
cin >> date2.year >> ch >> date2.month >> ch >> date2.day;
cout << getDaysBetween(date1, date2) << endl;
return 0;
}
```
输入输出示例:
```
2000-1-1 2022-3-15
8109
```