日期的各种水,用之前编过的一个程序改改交了就过。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int monthLimit[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char weekDay[7][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
struct Date
{
int year;
int month;
int day;
};
int isLeap(int year)
{
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
return 1;
}
return 0;
}
int isValid(int year, int month, int day)
{
if(month >= 1 && month <= 12 && day >= 1 && day <= monthLimit[month - 1] + (int)(month == 2) * isLeap(year))
{
return 1;
}
return 0;
}
int whatDay(int year, int month, int day)
{
int i;
int days = 0;
int result;
for(i = 2000; i < year; i++)
{
days += 365;
days += isLeap(i);
}
for(i = 1; i < month; i++)
{
days += monthLimit[i - 1];
if(i == 2)
{
days += isLeap(year);
}
}
days += day - 1;
result = (6 + days ) % 7;
if(result == 0)
{
return 7;
}
else
{
return result;
}
}
int main()
{
struct Date input;
int days;
int result;
int te;
scanf("%d", &te);
while(te--)
{
//printf("Please input a date after 2000 01 01 in form of yyyy mm dd:\n");
//scanf("%d %d %d", &input.year, &input.month, &input.day);
scanf("%d %d", &input.month, &input.day);
input.year = 2011;
if(isValid(input.year, input.month, input.day) == 1)
{
if(input.year < 2000)
{
printf("This date is too early!\n");
}
else
{
result = whatDay(input.year, input.month, input.day);
//printf("This day is %s.\n", weekDay[result - 1]);
printf("%s\n", weekDay[result - 1]);
}
}
else
{
printf("This date is invalid!\n");
}
//system("pause");
}
return 0;
}