#include #include class Date { public: Date(int year, int month, int day) { date_year = year; date_month = month; date_day = day; } bool IsLeap() const { return (((date_year) % 4) == 0 && \ (((date_year) % 100) != 0 || ((date_year) % 400) == 0)); } std::string ToString() const { std::string string_day = std::to_string(date_day); std::string string_month = std::to_string(date_month); std::string string_year = std::to_string(date_year); for (unsigned int i = 0; i < 2 - string_day.length(); i++) { string_day.insert(0, "0"); } for (unsigned int i = 0; i < 2 - string_month.length(); i++) { string_month.insert(0, "0"); } while (string_year.length() != 4) { string_year.insert(0, "0"); } std::stringstream date; date << string_day << "." << string_month << "." << string_year; return date.str(); } Date DaysLater(int days) const { int year = date_year; int day = date_day; int month = date_month; int no_leap[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int leap[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; while (days != 0) { day++; if (IsLeap()) { if (day > leap[month - 1]) { day = 1; month++; } } else if (day > no_leap[month - 1]) { day = 1; month++; } if (month > 12) { month = 1; year++; } days--; } Date date(year, month, day); return date; } int DaysLeft(const Date & date) const { int year = date_year; int day = date_day; int month = date_month; int no_leap[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int leap[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int counter = 0; while ((year != date.date_year) || (month != date.date_month) || (day != date.date_day)) { day++; counter++; if (IsLeap()) { if (day > leap[month]) { day = 1; month++; } } else if (day > no_leap[month]) { day = 1; month++; } if (month > 12) { month = 1; year++; } } return counter; } private: int date_year; int date_month; int date_day; };