#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; string size1(string dm) { if (dm.length() == 1) dm = '0' + dm; return dm; } string size2(string y) { if (y.length() == 4) return y; while (4 - y.length() != 0) y = '0' + y; return y; } class Date { private: int mdays[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int Leap(int m) { if (m == 2) { return IsLeap() ? 29 : 28; } else { return mdays[m - 1]; } } int day; int month; int year; public: Date(int year, int month, int day) { this->year = year; this->month = month; this->day = day; } bool IsLeap() { if (this->year % 4 == 0) { if (this->year % 100 == 0) { if (this->year % 400 == 0) return true; else return false; } else return true; } else return false; } string ToString() { string s = size1(to_string(this->day)) + '.' + size1(to_string(this->month)) + '.' + size2(to_string(this->year)); return s; } Date DaysLater(int days) { int d, m = this->month, y = this->year; days += day; int count_d = Leap(m); while (days > count_d) { days -= count_d; if (m == 12) { m = 1; y += 1; } else m += 1; count_d = Leap(m); } d = days; Date dat(y, m, d); return dat; } int DaysLeft(const Date& date) { Date dat(date.year, date.month, date.day); int days = dat.day; while (this->month != dat.month || this->year != dat.year) { if (dat.month == 1) { dat.year -= 1; dat.month = 12; } else dat.month -= 1; days += Leap(dat.month); } days -= this->day; return days; } };