题目描述
输入年、月、日,计算该天是本年的第几天。
输入描述
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出描述
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
分析
水题,注意闰年和每个月的天数即可,可以使用一个全局数组来记录每个月的天数,如果是闰年再特殊处理。关于年份和日期的题目不是很难,不过实际写起来可能会有一点麻烦,因为每个月的天数不同,并且还要考虑闰年的情况。如果是在一年内还好,如果跨年份还会更加复杂。另外,在具体实现时还需要注意,如果是在二月份的某一天,即使是闰年,也不要多加一天,因为还没有跨过二月,在编程时要注意这种情况。
AC代码如下:
#include<iostream>
using namespace std;
//全局数组记录每月的天数,这是平年的情况,闰年单独处理
int day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool isr(int y)//判断是否是闰年
{
if((y%4 == 0 && y%100 != 0) || y%400 == 0)
{
return true;
}
return false;
}
int main(void)
{
int y, m, d;
while(cin >> y >> m >> d)
{
int result = 0;
if(isr(y) && m > 2)//是闰年,且已经跨过二月
{
result = 1;
}
for(int i = 0; i < m-1; ++i)//计算整月的天数
{
result += day[i];
}
result += d;//计算最后一个月经过的天数
cout << result;
}
return 0;
}