HDOJ 2005 第几天?
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
闰年判断条件:1.能被4整除,但不能被100整除;2.能被400整除;符合以上任意一条的年份都属于闰年。
解法一:利用switch的特性
#include<stdio.h>
int main(void)
{
int year, mouth, day, total;
while (scanf("%d/%d/%d", &year, &mouth, &day) != EOF)
{
total = 0;
switch (mouth)
{
case 12: total += 30;
case 11: total += 31;
case 10: total += 30;
case 9: total += 31;
case 8: total += 31;
case 7: total += 30;
case 6: total += 31;
case 5: total += 30;
case 4: total += 31;
case 3:
{
//处理闰年的情况
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
//闰年判断条件
total += 29;
else
total += 28;
}
case 2: total += 31;
case 1: total += day;
}
printf("%d\n", total);
}
return 0;
}
解法二:用数组
#include<stdio.h>
int month_day ( int year, int yearday, int day);
int main(void)
{
int year, mouth, day, total;
while (scanf("%d/%d/%d", &year, &mouth, &day) != EOF)
printf("%d\n", month_day(year, mouth, day));
return 0;
}
int month_day ( int year, int mouth, int day)
{
int sum = 0;
int i;
int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//处理闰年情况
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
arr[2]++;
for (i = 1; i < mouth; i++)
sum += arr[i];
return sum + day;
}