牛客網 華中科技大學 列印日期
阿新 • • 發佈:2019-02-12
題目描述
給出年分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
答案
#include<stdio.h>
//判斷是否為閏年
int isleapyear(int year)
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return 1;
}
return 0;
}
int main()
{
int i;
int year, x;
//累加法,分級別,以索引為月,以差值為日
int leap[13] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
int noleap[13] = {0, 31, 59, 90, 120, 151 , 181, 212, 243, 273, 304, 334, 365};
while(scanf("%d %d", &year, &x) != EOF)
{
//一年12月
for(i = 0; i < 13; i++)
{
//先看看是否為閏年
if(isleapyear(year))
{
if(leap[i] >= x)
{
printf ("%04d-%02d-%02d\n", year, i, x - leap[i - 1]);
break;
}
}
else
{
if(noleap[i] >= x)
{
printf("%04d-%02d-%02d\n", year, i, x - noleap[i - 1]);
break;
}
}
}
}
return 0;
}