描述
给出年分m和一年中的第n天,算出第n天是几月几号。
输入
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出
可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
输入样例 1
2013 60
2012 300
2011 350
2000 211
输出样例 1
2013-03-01
2012-10-26
2011-12-16
2000-07-29
根据题目要求是日期,日期分闰年和平年,所以首先要判断是否为闰年,根据题目的范围我们得出闰年是条件是能被400整除或者能被4整除但是不能被100整除的年分,然后我们可以提前列出一年的开始到每一个月结束是多少天,然后找到大于或者等于n的那个月,用n减去那个月的前一个元素既为这个月的天数。这里需要注意365天年可以会有366的n这时如果月大于12则月份为原来的月份减掉12是
#include <iostream>
#include <stdio.h>
using namespace std;
int P[]= {31,59,90,120,151,181,212,243,273,304,334,365};
int R[]= {31,60,91,121,152,182,213,244,274,305,335,366};
int main()
{
int y,n,jug,i;
while(cin>>y>>n)
{
if(y%400==0)
jug=1;
else if(y%4==0&&y%100!=0)
jug=1;
else
jug=2;
if(jug==1)
{
int m;
for(i=0; i<12; i++)
if(R[i]>=n)
break;
m=i+1;
if(i+1>12)
{
y++;
m-=12;
}
printf("%04d-%02d-%02d\n", y, m, n-R[i-1]);
}
else
{
int m;
for(i=0; i<12; i++)
if(P[i]>=n)
break;
m=i+1;
if(i+1>12)
{
y++;
m-=12;
}
printf("%04d-%02d-%02d\n", y, m, n-P[i-1]);
}
}
return 0;
}