问题描述
给定一个年份 y 和一个整数 d,问这一年的第 d 天是几月几日?
注意闰年的 2 月有 29 天。
满足下面条件之一的是闰年:
- 年份是 4 的整数倍,而且不是 100 的整数倍;
- 年份是 400 的整数倍。
输入格式:
输入的第一行包含一个整数 y y y,表示年份,年份在 1900 1900 1900到 2015 2015 2015 之间(包含 1900 1900 1900 和 2015 2015 2015)。
输入的第二行包含一个整数 d d d, d d d在 1 1 1至 365 365 365之间。
输出格式:
输出两行,每行一个整数,分别表示答案的月份和日期。
数据范围
1900
≤
y
≤
2015
1900≤y≤2015
1900≤y≤2015,
1
≤
d
≤
365
1≤d≤365
1≤d≤365
输入样例1:
2015
80
输出样例1:
3
21
输入样例2:
2000
40
输出样例2:
2
9
思路
1、判断闰年得到2月的天数
2、模拟翻日历即可
C++代码:
#include <iostream>
using namespace std;
//0用来占位 其他的用来模拟日历
int months[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,d;
//得到每一个月的天数
int getDay(int year,int month)
{
if(month != 2) return months[month];
else{
int leap = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
return 28 + leap;
}
}
//给定年月日,经过n天后对应的日期
void pass(int y,int n)
{
//模拟第几天
int d = 0;
//模拟月份
int m = 1;
while(n--){
d++;
if(d > getDay(y,m)) m++, d = 1;
if(m > 12) y++, m = 1;
}
cout << m << endl << d;
}
int main()
{
cin >> y >> d;
pass(y,d);
return 0;
}