题目描述
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
思路
由于闰年的二月有29天,所以需要判断年份是否为闰年,以及月份是否大于二月,可以用一个数组保存每个月的天数。
C++代码:
#include<bits/stdc++.h>
using namespace std;
int num[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
int Y, M, D;
while(scanf("%d/%d/%d", &Y, &M, &D) != EOF)
{
int ans = D;
for(int i = 0; i < M; i++)
ans += num[i];
if(((Y % 4 == 0 && Y % 100 != 0) || Y % 400 == 0) && M >= 3) ans++;
cout << ans << endl;
}
return 0;
}
当然,你也可以不用数组保存每个月的天数,但是写着会累一点点,比如说这样:
C语言代码:
#include<stdio.h>
int main()
{
int YYYY, MM, DD, ans;
while(scanf("%d/%d/%d", &YYYY, &MM, &DD) != EOF)
{
if((YYYY % 4 == 0 && YYYY % 100 != 0) || (YYYY % 400 == 0))
{
if(MM == 1)
ans = DD;
else if(MM == 2)
ans = 31 + DD;
else if(MM == 3)
ans = 31 + 29 + DD;
else if(MM == 4)
ans = 31 + 29 + 31 + DD;
else if(MM == 5)
ans = 31 + 29 + 31 + 30 + DD;
else if(MM == 6)
ans = 31 + 29 + 31 + 30 + 31 + DD;
else if(MM == 7)
ans = 31 + 29 + 31 + 30 + 31 + 30 + DD;
else if(MM == 8)
ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + DD;
else if(MM == 9)
ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + DD;
else if(MM == 10)
ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + DD;
else if(MM == 11)
ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + DD;
else if(MM == 12)
ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + DD;
printf("%d\n", ans);
}
else
{
if(MM == 1)
ans = DD;
else if(MM == 2)
ans = 31 + DD;
else if(MM == 3)
ans = 31 + 28 + DD;
else if(MM == 4)
ans = 31 + 28 + 31 + DD;
else if(MM == 5)
ans = 31 + 28 + 31 + 30 + DD;
else if(MM == 6)
ans = 31 + 28 + 31 + 30 + 31 + DD;
else if(MM == 7)
ans = 31 + 28 + 31 + 30 + 31 + 30 + DD;
else if(MM == 8)
ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + DD;
else if(MM == 9)
ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + DD;
else if(MM == 10)
ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + DD;
else if(MM == 11)
ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + DD;
else if(MM == 12)
ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + DD;
printf("%d\n", ans);
}
}
return 0;
}
看起来还挺有艺术效果的?