题解 | #打印日期#
打印日期
https://www.nowcoder.com/practice/b1f7a77416194fd3abd63737cdfcf82b
#include <iostream>
using namespace std;
class Date
{
public:
Date(int year = 2000, int month = 1, int day = 1)
:_year(year)
, _month(month)
, _day(day)
{
}
int GetMonthDay(int year, int month);
//声明
//流插入
friend ostream& operator<<(ostream& out, const Date& d);
Date operator+ (int n);
private:
//声明 :成员变量
int _year;
int _month;
int _day;
};
int Date::GetMonthDay(int year, int month)
{
int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
// if ( month == 2 && ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ) )
{
return 29;
}
else
{
return arr[month];
}
}
ostream& operator<< (ostream& out, const Date& d)
{
if (d._month < 10 && d._day < 10)
{
out << d._year << "-" << 0 << d._month << "-" << 0 << d._day;
}
else if (d._month >= 10 && d._day < 10)
{
out << d._year << "-" << d._month << "-" << 0 << d._day;
}
else if (d._month < 10 && d._day >=10)
{
out << d._year << "-" << 0 << d._month << "-" << d._day;
}
else
out << d._year << "-" << d._month << "-" << d._day;
return out;
}
Date Date::operator+ (int n)//50
// Date Date::operator+ (Date *this , int n)
//计算天数到日期的转换
{
int year = _year; //2000
int month = _month;//1
int day = _day;//1
int days = GetMonthDay(year, month);
while(day + n > days)
{
//对month 进行操作
month++;
if (month == 13)
{
year++;
month = 1;
}
n -= days;
days = GetMonthDay(year, month);
}
//对day 进行操作
day += n;
//匿名对象
return Date(year, month, day);
}
int main()
{
int year, month, day = 0;
int n = 0;
while (cin >> year >> n)
{
Date d1(year, 1, 1); //假设year是2000,传参数为2000-1-1
Date d2 = d1 + (n - 1); //2000-1-1 +( n -1) 就是结果
cout << d2 << endl;
}
return 0;
}
