#pragma once #include class Date { private: int year, month, day; public: Date(int year, int month, int day):day(day), month(month), year(year) { } bool IsLeap() const { if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { return true; } return false; } std::string ToString() const { std::string s0 = "."; std::string s1 = std::to_string(day); if (day < 10) { s1 = "0" + s1; } std::string s2 = std::to_string(month); if (month < 10) { s2 = "0" + s2; } std::string s3 = std::to_string(year); while (s3.length() < 4) { s3 = "0" + s3; } std::string s = s1 + s0 + s2 + s0 + s3; return s; } Date DaysLater(int days) const { int months[12], d(day), m(month-1), y(year); months[0] = 31, months[1] = 28, months[2] = 31; months[3] = 30, months[4] = 31, months[5] = 30; months[6] = 31, months[7] = 31, months[8] = 30; months[9] = 31, months[10] = 30, months[11] = 31; while (days > 0) { months[1] = 28; if (y % 4 == 0) { months[1] = 29; } if (d < months[m]) { d += 1; } else if (d == months[m]) { if (m + 1 == 11) { y += 1; } m = (m + 1) % 12; d = 1; } days -= 1; } return Date(y, m + 1, d); } int DaysLeft(const Date& date) const { int months[12], d(day), m(month-1), y(year), d_(0); months[0] = 31, months[1] = 28, months[2] = 31; months[3] = 30, months[4] = 31, months[5] = 30; months[6] = 31, months[7] = 31, months[8] = 30; months[9] = 31, months[10] = 30, months[11] = 31; while (date.day!= d || date.month-1 != m || date.year != y) { months[1] = 28; if (y % 4 == 0) { months[1] = 29; } if (d < months[m]) { d += 1; } else if (d == months[m]) { if (m + 1 == 11) { y += 1; } m = (m + 1) % 12; d = 1; } d_ += 1; } return d_; } };