题目描述
设计一个程序能计算一个日期加上若干天后是什么日期。
- 输入描述:
输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。 - 输出描述:
输出m行,每行按yyyy-mm-dd的个数输出。
题解
1.定义一个静态数组存放12个月每月对应的天数,其中2月默认为28天。若是闰年则2月为29天。
2.累加日期,若是大于当月所对应的天数,则向月进位;如果月增加到13,则另月为1,向年进位。
3.注意题目要求的输入输出方式。
#include<iostream>
using namespace std;
class Date
{
private:
int _year;
int _month;
int _day;
public:
int _n;
//获取当月日期
int GetMonthDay(int year,int month){
static 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)))
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 Input(){
int year,month,day,n=0;
cin>>year>>month>>day>>n;
//判断输入日期是否合法
if (year >= 0 && month >= 1 && month <= 12 && day >= 1 && day <= GetMonthDay(year, month)){
_year=year;
_month=month;
_day=day;
_n=n;
}
}
//输出
void Print(){
printf("%d-%02d-%02d\n",_year,_month,_day);
}
};
int main(){
int count=0;
int year,month,day,n=0;
cin>>count;
Date d[count];
for(int i=0;i<count;++i)
d[i].Input();
for(int j=0;j<count;++j){
d[j]+=d[j]._n;
d[j].Print();
}
return 0;
}