题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#include <climits>
#include <iostream>
using namespace std;
class Date
{
protected:
friend ostream&operator<<(ostream&out,const Date&d);
public:
Date(int year ,int month,int day);
Date operator+(int n);
int GetMonthDay(int year,int month);
private:
int _year;
int _month;
int _day;
};
Date::Date(int year ,int month,int day)
:_day(day)
,_month(month)
,_year(year)
{}
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)//日期类的赋值重载加号
{
int year=_year;
int month=_month;
int day=_day;
int days=GetMonthDay(year,month);//获取当月的天数
while(day+n>days)//如果加起来的天数大于当月底的天数的话我们就进行操作
{
month++;
if(month>12)//变成了次年的1月了
{
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;//那么就是29天了
}
return day;
}
int main()
{
int count=0;
int year=0,month=0,day=0;
int n=0;
cin>>count;
for(int cur=0;cur<count;cur++)
{
cin>>year>>month>>day>>n;
Date d(year,month,day);
Date d1=d+n;//加之后的天数
cout<<d1<<endl;
}
return 0;
}


vivo公司福利 364人发布