HDU - 2005
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
问题分析:注意闰年。
程序说明:先确定哪年哪月哪日,再耿直算,最后判定如果是闰年且月份大于三,得出结果加1输出。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int y, m, d, k, ans;
string s[1];
while (cin >> s[0])
{
k = s[0].size();
if (s[0][6] == '/') {m = s[0][5] - '0'; if (k == 9)d = (s[0][7] - '0') * 10 + (s[0][8] - '0'); else d = s[0][7] - '0';}
else { m = (s[0][5] - '0') * 10 + (s[0][6] - '0');if(k==10) d = (s[0][8] - '0') * 10 + (s[0][9] - '0'); else d = s[0][8] - '0';}
y = (s[0][0] - '0') *1000 + (s[0][1] - '0') * 100 + (s[0][2] - '0') * 10 + (s[0][3] - '0');
switch (m)
{
case 1:ans = d; break;
case 2:ans = d + 31; break;
case 3:ans = d + 59; break;
case 4:ans = d + 90; break;
case 5:ans = d + 120; break;
case 6:ans = d + 151; break;
case 7:ans = d + 181; break;
case 8:ans = d + 212; break;
case 9:ans = d + 243; break;
case 10:ans = d + 273; break;
case 11:ans = d + 304; break;
case 12:ans = d + 334; break;
}
if (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) && m >= 3)ans = ans + 1;
cout << ans << endl;
}
return 0;
}