#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 = 1, int day = 0) : _year(year) , _month(month) , _day(day) {} void Print() { printf("%04d-%02d-%02d", _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 year, day; while (cin >> year >> day) { Date d(year); d += day; d.Print(); } return 0; }
如果你想看一个更完备的Date类,速通所有关于日期类的程序题,可以关注一下我新写的博客。学会Date类的编写,可以根据题目要求,自定义裁切Date类完成解答。 https://blog.csdn.net/mmlhbjk/article/details/141825524?spm=1001.2014.3001.5502