#include #include class Date { public: int y, m, d; Date(int year, int month, int day); bool IsLeap() const; std::string ToString() const; Date DaysLater(int days) const; int DaysLeft(const Date& date) const; void NextDay(); }; int md[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; Date::Date(int year, int month, int day) { y = year; m = month; d = day; } bool Date::IsLeap() const { return (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)); } std::string Date::ToString() const { std::string ans = ""; if (d < 10) ans += "0"; ans += std::to_string(d) + "."; if (m < 10) ans += "0"; ans += std::to_string(m) + "."; for (int i = y; i < 1000; i *= 10) ans += "0"; ans += std::to_string(y); return ans; } Date Date::DaysLater(int days) const { Date ans(y, m, d); for (int i = 0; i < days; i++) ans.NextDay(); return ans; } int Date::DaysLeft(const Date& date) const { Date ans(y, m, d); int cnt = 0; while (ans.d != date.d || ans.m != date.m || ans.y != date.y) { ans.NextDay(); cnt++; } return cnt; } void Date::NextDay() { d++; if (d >= md[m] + 1) { if ((m == 2 && IsLeap() && d == 30) || !(m == 2 && IsLeap())) { d = 1; m++; } } if (m == 13) { m = 1; y++; } }