題目描述
給出年分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;
}