【牛客網】北京理工大學 日期類 解題報告

題目描述

編寫一個日期類,要求按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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章