题解 | #日期累加#

日期累加

https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d

#include <climits>
#include <iostream>
using namespace std;

class  Date
{  
public:
    friend ostream&operator<<(ostream&out,const Date&d);
    Date(int year, int month,int day );
    int GetMonthDay(int year,int month);
    Date&operator+=(int day);
private:
    int _year;
    int _month;
    int _day;
};
Date::Date(int year,int month ,int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
Date&Date::operator+=(int day)
    {
        _day+=day;
        while(_day>GetMonthDay(_year, _month))
        {
            _day-=GetMonthDay(_year,_month);
            ++_month;
            if(_month==13)
            {
                _year++;
                _month=1;
            }
        }
        return *this;
    }
 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;
    }
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;
}

void TestDate1()
{
    int year=0,month=0,day=0;
    int m=0;
    int n=0;
    cin>>m;
   for(int i=0;i<m;i++)
   {
    cin>>year>>month>>day>>n;
    Date d(year,month,day);
    d+=n;
    cout<<d<<endl;
   }
}
int main()
{
    TestDate1();
    return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务