#include <iostream> using namespace std; #include <assert.h> class Date { public: Date(int year = 0, int month = 0, int day = 0) :_year(year) , _month(month) , _day(day) {} inline int GetMonthDay(int year, int month) { assert(month > 0 && month < 13); static int monthDayArray[13] = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30,31, 30, 31 }; // 365天 5h + if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) { return 29; } else { return monthDayArray[month]; } } void Print() { //cout << _year << "-" << _month << "-" << _day; printf("%04d-%02d-%02d\n",_year,_month,_day); } Date& operator+=(int day) { _day += day; // =不执行,比如下个月28,则就是x月28天 while (_day > GetMonthDay(_year, _month)) { _day -= GetMonthDay(_year, _month); ++_month; if (_month == 13) { _month = 1; ++_year; } } return *this; } private: int _year; int _month; int _day; }; int main() { int year,month,day,number_of_days, number_of_samples; cin>>number_of_samples; while(number_of_samples--) { while( cin>>year>>month>>day>>number_of_days) { Date d(year,month,day); d += number_of_days; d.Print(); } } return 0; }