【牛客網】華中科技大學 打印日期 解題報告

題目描述

給出年分m和一年中的第n天,算出第n天是幾月幾號。

輸入描述:

輸入包括兩個整數y(1<=y<=3000),n(1<=n<=366)。

輸出描述:

可能有多組測試數據,對於每組數據,
按 yyyy-mm-dd的格式將輸入中對應的日期打印出來。

示例1

輸入

複製

2000 3
2000 31
2000 40
2000 60
2000 61
2001 60

輸出

複製

2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01

題解

%d是普通的輸出;%2d是將數字按寬度爲2,採用右對齊方式輸出,若數據位數不到2位,則左邊補空格;%02d和%2d差不多,只不過左邊補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, num;
    int i;
	int month = 1, day = 0;
    while(scanf("%d%d", &year, &num) != EOF){
        while(num > 0){
			day++;
			if(day == day_month[month][isLeap(year)] + 1){//滿當月天數
				month++;
				day = 1;//日期變爲下個月的1號
			}
			if(month == 13){//滿十二個月
				year++;
				month=1;//日期變爲下一年的1月
			}
			num--;
		}
		printf("%04d-%02d-%02d\n", year, month, day);
		month = 1, day = 0;//重新初始化 
    }
	return 0;
}

 

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