打印日期 首先,通过读题我们得出只输入年份和天数,要我们计算这年的具体日期,而通过观察输入样例,我们得出是从给出年份的1月1日开始算起。因此,我们计算日期的函数为+号运算符的重载:

Date Date::operator+(int n)
{
	int year = _year;
	int month = _month;
	int day = _day;
	int days = GetMonthDay(year, month);

	while (day + n > days)
	{
		month++;
		if (month > 12)
		{
			year++;
			month = 1;
		}
		n -= days;
		days = GetMonthDay(year, month);
	}
	day += n;
	return Date(year, month, day);
}

由于输出的月份和日期是两位数,小于10的数要填0,所以我们对输出运算符重载:

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 << "-" <<0<< d._month << "-" << d._day;
    else if(d._month>=10&&d._day<10)
        out << d._year << "-" << d._month << "-" <<0<< d._day;
    else
        out<<d._year<<"-" << d._month << "-" << d._day;
    return out;
}

需要注意的是,循环输入

	while(cin>>year>>n)
    {
        
        Date d(year,month,day);
        Date d2=d+(n-1);
        cout<<d2<<endl;
    }

完整代码如下:

#include<iostream>
using namespace std;

class Date
{
protected:
    friend ostream& operator<<(ostream& out,const Date &d);
public:
    Date(int year=2000,int month=1,int day=1);
    int GetMonthDay(int year, int month);
    Date operator+(int n);
private:
    int _year;
    int _month;
    int _day;
};

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 << "-" <<0<< d._month << "-" << d._day;
    else if(d._month>=10&&d._day<10)
        out << d._year << "-" << d._month << "-" <<0<< d._day;
    else
        out<<d._year<<"-" << d._month << "-" << d._day;
    return out;
}

Date::Date(int year,int month,int day)
{
    _year=year;
    _month=month;
    _day=day;
}
//计算天数到日期的转换
Date Date::operator+(int n)
{
	int year = _year;
	int month = _month;
	int day = _day;
	int days = GetMonthDay(year, month);

	while (day + n > days)
	{
		month++;
		if (month > 12)
		{
			year++;
			month = 1;
		}
		n -= days;
		days = GetMonthDay(year, month);
	}
	day += n;
	return Date(year, month, day);
}
//获取某年某月的天数
int Date::GetMonthDay(int year, int month)
{
static int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int day = days[month];
	if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))
	{
		day += 1;
	}
	return day;
}

int main()
{
    int year=2000,month=1,day=1;
    int n=0;
    
    while(cin>>year>>n)
    {
        
        Date d(year,month,day);
        Date d2=d+(n-1);
        cout<<d2<<endl;
    }
    
    return 0;
}