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;
}