题目描述
输入某年某月某日,判断这一天是这一年的第几天?
输入描述:输入三行,分别是年,月,日
输出描述:成功:返回outDay输出计算后的第几天;失败:返回-1
示例
输入: 2012 12 31
输出:366
解题思路
用一个数组存放每月的累积天数 输入的日期天数= 当月的天数 + 当月之前的累积天数 如果包含二月,再去判断是否 为闰年,如果是闰年,再加1天即可
完整代码
解题1
#include <iostream>
using namespace std;
int main()
{
int array[12] = {31,59, 90, 120, 151, 181, 212,
243, 273, 304, 334, 365};
int year;
int month;
int day;
int sum = 0;
while(cin >> year >> month >> day)
{
sum = 0;
sum += array[month - 2];
sum += day;
if(month > 2)
{
if((year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0)
{
sum += 1;
}
}
cout << sum <<endl;
}
}
解题2
#include <iostream>
using namespace std;
class Date
{
public:
Date(int year, int month, int day)
:_year(year)
, _month(month)
, _day(day)
{}
int GetDays()
{
int d1[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int d2[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int days = 0;
if (_year>0 && _month>0 && _month<13 && _day>0 && _day<32)
{
for (int i = 1; i<_month; i++)
{
if (_year % 4 == 0 && _year % 100 != 0 || _year % 400 == 0)
days += d2[i];
else
days += d1[i];
}
if (_year % 4 == 0 && _year % 100 != 0 || _year % 400 == 0)
{
if (_day <= d2[_month])
days += _day;
else
return -1;
}
else
{
if (_day <= d1[_month])
days += _day;
else
return -1;
}
return days;
}
else
return -1;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
int y;
int m;
int d;
while (cin >> y >> m >> d)
{
Date date(y, m, d);
int days = date.GetDays();
cout << days;
}
return 0;
}