解题思路
-
定义是否为闰年:通过函数
isLeap(int year)
判断给定的年份是否为闰年。如果年份满足以下条件之一,则为闰年:- 年份可以被4整除,但不能被100整除;
- 年份可以被400整除。
-
初始化月份天数:通过数组
int Month[]
定义了一个普通年份中每个月的天数。2月默认设为28天,考虑到闰年的情况后会有所调整。 -
输入年份和天数:读入年份
y
和天数d
。年份用于判断是否为闰年,天数用于确定具体的月份和日期。 -
计算月份和日期:
- 首先,使用循环逐月减去每个月的天数,直到
d
减到0或负数。循环中,i
代表当前的月份索引(从0开始,对应一月至十二月)。 - 如果是2月并且是闰年,则天数减去29;否则,减去
Month[i]
指定的天数。 - 如果在某个月减去天数后
d
变为0或负数,说明已找到对应的月份和日期。 - 输出时,月份为当前循环的月份(因为月份从1开始,而数组从0开始索引,所以实际月份应该是循环次数
mon
),日期为d
加上最后一个月减去的天数(因为d
已经是负数或零,所以需要加回来)。
- 首先,使用循环逐月减去每个月的天数,直到
完整代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool isLeap(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return true;
return false;
}
int Month[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int y, d, mon = 1;
int main() {
cin >> y >> d;
bool isLeapYear = isLeap(y); // 是否为闰年
for (int i = 0; i < 12; i++)
{
if (i == 1 && isLeapYear)
{
d -= 29;
}
else
{
d -= Month[i];
}
if (d <= 0)
{
if (i == 1 && isLeapYear)
{
cout << mon << endl << d + 29;
}
else
{
cout << mon << endl << d + Month[i];
}
break;
}
else
{
mon++;
}
}
return 0;
}