HDU - 2005

HDU - 2005
Time limit:1000 ms
Memory limit:32768 kB

问题描述:
给定一个日期,输出这个日期是该年的第几天。

Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。

Sample Input
1985/1/20
2006/3/12

Sample Output
20
71

问题分析:
注意输入数据有多组,且数据格式为YYYY/MM/DD,而且需要注意闰年(普通闰年:能被4整除但不能被100整除的年份为普通闰年。(如2004年就是闰年,1999年不是闰年);世纪闰年:能被400整除的为世纪闰年。)和平年二月天数的差异,闰年29天,平年28天。

程序说明:
自定义一个days函数,用于区分平年和闰年二月天数的区别,再用switch语句按不同月份计算天数。
对于输入格式要求,采用字符a和字符b来储存/,用整形c,d,e分别储存年月日即可。
用while循环控制多组输入。

AC通过的C++程序如下:

#include<iostream>
using namespace std;
void days(int a,int b,int c)
{
	int sum = 0;  
	int F;   
	if (a% 400 == 0)    
		F = 29;
	else if ((a % 4 == 0) && (a % 100 != 0))
		F = 29;
	else F = 28;
	switch (b)
	{
	case 1:sum = c; break;
	case 2:sum = 31 + c; break;
	case 3:sum = 31 + F + c; break;
	case 4:sum = 31 * 2 + F + c; break;
	case 5:sum = 31 * 2 + 30 + F + c; break;
	case 6:sum = 31 * 3 + 30 + F + c; break;
	case 7:sum = 31 * 3 + 30 * 2 + F + c; break;
	case 8:sum = 31 * 4 + 30 * 2 + F + c; break;
	case 9:sum = 31 * 5 + 30 * 2 + F + c; break;
	case 10:sum = 31 * 5 + 30 * 3 + F + c; break;
	case 11:sum = 31 * 6 + 30 * 3 + F + c; break;
	case 12:sum = 31 * 6 + 30 * 4 + F + c; break;
	}
	cout << sum << endl;
	
}

int main()
{
	
	int sum;
	int c, d, e;
	char a, b;
	int i = 0;
	while(cin >>c >>a>> d >>b>> e)
		days(c,d,e);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43983336/article/details/84918954
hdu