class Date(){ public: Date(int year, int month, int day){ date_year = year; date_month = month; date_day = day; } bool IsLeap() const{ if (date_year % 4 == 0) { if (date_year % 100 == 0) { if (date_year % 400 == 0) { return true; } else return false; } else return true; } return false; } string ToString() const{ string_day = to_string(date_day); string_month = to_string(date_month); string_year = to_string(date_year); if (date_day < 10){ string_day = "0" + string_day; } if (date_month < 10){ string_month = "0" + string_month; } if (date_year < 10){ string_year = "000" + string_year; } else if (date_year >= 10 && date_year < 100){ string_year = "00" + string_year; } else if (date_year >= 100 && date_year < 1000){ string_year = "0" + string_year; } return string_day + "." + string_month + "." + string_year; } Date DaysLater(int days) const { if (date_day + days == date_day){ return {date_year, date_month, date_day}; } else { while (days > 0){ days--; if (date_month == 2 && date_day == 28){ if ({date_year, date_month, date_day}.IsLeap()){ date_day++; } } else if (date_month == 12 && date_day == 31){ date_day = 1; date_month = 1; date_year++; } else if (date_day < count_of_days[date_month]){ date_day++; } else{ date_day = 1; date_month++; } } } return {date_year, date_month, date_day}; } int DaysLeft(const Date& date) const { int counter = 0; while (date_year != date.date_year && date_month != date.date_month && date_day != date.date_day){ if (date_month == 2 && date_day == 28){ if ({date_year, date_month, date_day}.IsLeap()){ counter++; date_day++; } } else if (date_month == 12 && date_day == 31){ date_day = 1; date_month = 1; date_year++; counter++; } else if (date_day < count_of_days[date_month]){ date_day++; counter++; } else{ date_day = 1; date_month++; counter++; } } return counter; } private: int date_year; int date_month; int date_day; int[12] count_of_days = {31,28,31,30,31,30,31,31,30,31,30,31}; }