题目描述
编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作。
输入描述:
输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。
输出描述:
输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。
示例1
输入
复制
2 1999 10 20 2001 1 31
输出
复制
1999-10-21 2001-02-01
备注:
注意个位数日期前面要有0。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
class Date{
private:
int year,month,day;
public:
Date();
Date(int y,int m,int d);
void addDay();
void show();
};
Date::Date(){
year = month = day;
}
Date::Date(int y,int m,int d){
year = y;
month = m;
day = d;
}
void Date::addDay(){
if(day==31){
if(month == 12){year+=1,month=1,day=1;}
else{month+=1,day=1;}
}
else if(day==30){
if(month==4||month==6||month==9||month==11){month+=1;}
else {day+=1;}
}
else if(day==29&&month==2){month=3;}
else if(day==28&&month==2){
if((year%400==0) || (year%4==0 && year%100!=0)){day+=1;}
else {month+=1,day=1;}
}
else{
day+=1;
}
}
void Date::show(){
if(month<10 && day<10)
printf("%d-0%d-0%d\n",year,month,day);
else if(month<10 && day>=10)
printf("%d-0%d-%d\n",year,month,day);
else if(month>=10 && day <10)
printf("%d-%d-0%d\n",year,month,day);
else
printf("%d-%d-%d\n",year,month,day);
}
int main(){
int n;
cin >> n;
while(n--){
int yi , mi , di;
cin >> yi >> mi >> di;
Date d(yi,mi,di);
d.addDay();
d.show();
}
return 0;
}