【牛客网】计算日期到天数转换

题目描述

输入某年某月某日,判断这一天是这一年的第几天?
输入描述:输入三行,分别是年,月,日
输出描述:成功:返回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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值