题目描述
给出年分m和一年中的第n天,算出第n天是几月几号。
输入描述
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出描述
可能有多组测试数据,对于每组数据,
按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
示例
输入
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
总结
闰年:(year%4==0&&year%100!=0) || (year%400 == 0)
Code
#include<iostream>
#include<cstdio>
using namespace std;
int leapYear[13] = {
0,31,29,31,30,31,30,31,31,30,31,30,31 };
int notLeapYear[13]= {
0,31,28,31,30,31,30,31,31,30,31,30,31 };
int operate(int year, int& day)
{
int month = 0;
bool is_leap_year = false;
if ((year % 100 != 0 && year%4==0) || (year % 400 == 0))
is_leap_year = true;
if (is_leap_year)
{
for (int i = 1; i < 13; i++)
{
if ((day - leapYear[i]) <= 0)
{
month = i;
break;
}
else {
day = day - leapYear[i];
}
}
}
else
{
for (int i = 1; i < 13; i++)
{
if ((day - notLeapYear[i]) < 0)
{
month = i;
break;
}
else {
day = day - notLeapYear[i];
}
}
}
return month;
}
int main()
{
int year, day;
while (cin >> year >> day)
{
int month = operate(year,day);
printf("%4d-%02d-%02d\n", year, month, day);
}
return 0;
}