題目描述
編寫一個日期類,要求按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 <cstdio>
#include <string.h>
int day_month[13][2] = {//平年和閏年的每個月的天數
{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30},
{31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30},
{31, 31}, {30, 30}, {31, 31}
};
bool isLeap(int year){//判斷是否是閏年
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main()
{
int year, month = 1, day = 0;
int i, m;
while(scanf("%d", &m) != EOF){
while(m--){
scanf("%d%d%d", &year, &month, &day);
if(day + 1 > day_month[month][isLeap(year)]){//超過當月天數
month++;
day = 1;//日期變爲下個月的1號
}
else{
day++;
}
if(month == 13){//滿十二個月
year++;
month=1;//日期變爲下一年的1月
}
printf("%04d-%02d-%02d\n", year, month, day);
month = 1, day = 0;//重新初始化
}
}
return 0;
}