#include <iostream> using namespace std; class Date { public: // 判断是否为闰年 bool isLeapYear(int year) const { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 获取任意月份的天数 int GetMonthDay(int year, int month) { static int monthArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int day = monthArray[month]; // 判断是否是闰年闰月 if (month == 2 && isLeapYear(year)) { day = 29; } return day; } // 构造函数 Date(int year, int month, int day) : _year(year), _month(month), _day(day) {} void Print() { printf("%04d-%02d-%02d\n", _year, _month, _day); } Date& operator+=(int day) { _day += day; while (_day > GetMonthDay(_year, _month)) { // 如果日期不合法,就要往月进位 _day -= GetMonthDay(_year, _month); _month++; // 如果月不合法,就要往年进位 if (_month > 12) { _year++; _month = 1; } } return *this; } private: int _year; int _month; int _day; }; int main() { int count = 0; cin >> count; while (count--) { int year, month, day; int gap; cin >> year >> month >> day >> gap; Date d(year, month, day); d += gap; d.Print(); } return 0; }
如果你想看一个更完备的Date类,速通所有关于日期类的程序题,可以关注一下我新写的博客。学会Date类的编写,可以根据题目要求,自定义裁切Date类完成解答。 https://blog.csdn.net/mmlhbjk/article/details/141825524?spm=1001.2014.3001.5502