给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
我的见解:第一步跟之前我发的博客排序有点像,那题是从5隔开,这个是从/隔开,然后获得年月日所对应的数字,通过调用函数,判断为闰年还是平年,再将一个一个月计算出来加是日就好了
代码如下:
#include <iostream>
using namespace std;
int days(int d, int m, int y)
{
int days; int z;
if ((y % 4 == 0 && y % 100 != 0)||(y % 400 == 0))
{
if (m == 1)z = 0;
if (m == 2)z = 31;
if (m == 3)z = 60;
if (m == 4)z= 91;
if (m == 5)z = 121;
if (m == 6)z = 152;
if (m == 7)z = 182;
if (m == 8)z = 213;
if (m == 9)z= 244;
if (m == 10)z = 274;
if (m == 11)z = 305;
if (m == 12)z = 335;
days = z + d;
}
else
{
if (m == 1) z= 0;
if (m == 2)z = 31;
if (m == 3)z = 60 - 1;
if (m == 4)z = 91 - 1;
if (m == 5)z = 121 - 1;
if (m == 6)z = 152 - 1;
if (m == 7)z = 182 - 1;
if (m == 8)z = 213 - 1;
if (m == 9) z= 244 - 1;
if (m == 10)z = 274 - 1;
if (m == 11)z = 305 - 1;
if (m == 12)z = 335 - 1;
days = z + d;
}
return days;
}
int main()
{
char a[10];
while (cin >> a)
{
int b[3] = { 0 }, c = 0, i, t, g, f = 0;
for (i = t = 0; a[i] != '\0'; i++)
{
if (a[i] == '/')
{
g = 1;
for (t = i - 1; t >= f; t--)
{
b[c] += (a[t] - 48)*g;
g *= 10;
}
f = i + 1;
c++;
}
}
for (g = 1, t = i - 1; t >= f; t--)
{
b[c] += (a[t] - 48) * g;
g *= 10;
}
int q = days(b[2], b[1], b[0]);
cout << q << endl;
}
}