#include <iostream>
using std::cout;
using std::cin;
using std::endl;
class Date {
public:
void setDate(int year, int month, int day);
int year() const;
int month() const;
int day() const;
std::string toString() const {
const int length_of_date_string = 10;
char date_string[length_of_date_string + 1];
snprintf(date_string,
length_of_date_string + 1,
"%04d-%02d-%02d",
year_, month_, day_);
return std::string(date_string);
}
void increase();
void decrease();
private:
int year_;
int month_;
int day_;
int daysOfMonth(int year, int month) const;
};
void Date::setDate(int year, int month, int day){
year_=year;
month_=month;
day_=day;
}
int Date::year() const{
return year_;
}
int Date::month() const{
return month_;
}
int Date::day() const{
return day_;
}
int Date::daysOfMonth(int year, int month) const{
if(month%2==0&&month>=8)return 31;
else if (month%2!=0&&month<=7)return 31;
else if(month!=2)return 30;
else if(year%400==0||(year%4==0&&year%100!=0))return 29;
else return 28;
}
void Date::increase(){
day_++;
if(day_>daysOfMonth(year_,month_)){
day_ = 1;
month_++;
if(month_>12){
year_++;
month_=1;
}
}
}
void Date::decrease(){
day_--;
if(day_==0){
month_--;
if(month_==0){
year_--;
month_=12;
day_=31;
}
day_=daysOfMonth(year_,month_);
}
}
void TestDate(Date& date, int after, int before) {
cout << "Year: " << date.year() << endl
<< "Month: " << date.month() << endl
<< "Day: " << date.day() << endl;
cout << "Formatted: " << date.toString() << endl;
date.increase();
cout << "1 day later: " << date.toString() << endl;
for (int i = 0; i < after; ++i) {
date.increase();
}
cout << "Another " << after << " day(s) later: " << date.toString() << endl;
for (int i = 0; i < before; ++i) {
date.decrease();
}
cout << "Another " << before << " day(s) earlier: " << date.toString() << endl;
}
int main() {
int year, month, day;
int after, before;
cin >> year >> month >> day;
cin >> after >> before;
Date date;
date.setDate(year, month, day);
TestDate(date, after, before);
return 0;
}
//还是良心附有测试main函数,先叉会腰冷静一下