给出年份 yy 和一年中的第 dd 天,算出第 dd 天是几月几号。
输入格式
输入包含多组测试数据。
每组数据占一行,包含两个整数 yy 和 dd。
输出格式
每组数据输出一行一个结果,格式为
yyyy-mm-dd
。数据范围
输入最多包含 100100 组数据,
1≤y≤30001≤y≤3000,
1≤d≤3661≤d≤366,
数据保证合法。
输入样例:
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
C++代码(日期三板斧)
#include <iostream>
using namespace std;
const int month[13] ={
0,31,28,31,30,31,30,31,31,30,31,30,31
};
// p判断是否是闰年
int is_leap(int y)
{
if((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) return 1;
else return 0;
}
int get_day(int y, int m) // y年m月有几天
{
if(m == 2) return is_leap(y) + month[m];
else return month[m];
}
int main() {
int y,s;
while(cin >> y >> s )
{
int m = 1,d = 0;
while(s--)
{
if(++d > get_day(y, m) ) // 如果天数大于本月的天数,更新
{
d = 1;
if(++m > 12) m = 1,y ++; // 年份大于12,更新
}
}
printf("%04d-%02d-%02d\n",y,m,d);
}
return 0;
}