题目描述
- 输入描述:
输入包括两个整数y(1<=y<=3000),n(1<=n<=366) - 输出描述:
可能有多组测试数据,对于每组数据,
按 yyyy-mm-dd的格式将输入中对应的日期打印出来
题解
基于日期类:初始化日期为yyyy-01-00,然后将输入的日期加上n,判断是否向月、是否向年进位,最后输出日期。
#include<iostream>
using namespace std;
class Date{
private:
int _year;
int _month;
int _day;
public:
//构造函数
Date(int year)
:_year(year)
,_month(1)
,_day(0) //初始化为year-1-0
{}
//获取当月天数
int GetMonthDay(int year,int month){
static int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//如果是闰年且是2月
if(month==2 && ((year%4==0 && year%100!=0) || year%400==0))
return 29;
return arr[month];
}
// +=运算符重载
Date& operator+=(int n){
_day+=n;
while(_day>GetMonthDay(_year, _month)){
_day-=GetMonthDay(_year, _month);
++_month;
if(_month==13){
++_year;
_month=1;
}
}
return *this;
}
//输出几月几号
void PrintDate(){
printf("%d-%02d-%02d\n",_year,_month,_day);
_year=_day=0;
_month=1; //重置
}
};
int main(){
int year,n=0;
while(cin>>year>>n){
Date d(year);
d+=n;
d.PrintDate();
}
return 0;
}