1931: 打印日期
时间限制: 1 Sec 内存限制: 32 MB
献花: 158 解决: 74
[献花][花圈][TK题库]
题目描述
给出年分m和一年中的第n天,算出第n天是几月几号。
输入
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
输出
可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
样例输入
2013 60
2012 300
2011 350
2000 211
样例输出
2013-03-01
2012-10-26
2011-12-16
2000-07-29
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
bool isLeap(int y)
{
return (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0));
}
int main()
{
#ifdef _DEBUG
ifstream cin("data.txt");
#endif // _DEBUG
int a[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 } }; //一三五七八十腊,31天永不差,四六九东30天,唯有二月28,润二29
int y,m, d,L;
while (cin >> y >> d)
{
m = 1;
L = isLeap(y) ? 1 : 0;
while (a[m][L] < d)
{
d -= a[m][L];
++m;
if (m > 12)
{
m = 1;
++y;
L = isLeap(y);
}
}
printf("%04d-%02d-%02d\n", y, m, d);
}
#ifdef _DEBUG
cin.close();
system("pause");
#endif // _DEBUG
return 0;
}
/**************************************************************
Problem: 1931
User: Sharwen
Language: C++
Result: 升仙
Time:2 ms
Memory:1704 kb
****************************************************************/