问题描述:
今天是2007年11月17日,星期六。现在如果我告诉你一个日期,你能告诉它是星期几吗?
输入:
输入有多组测试数据,每个测试数据占一行。每行有3个整数,分别表示:年(0<year<10000), 月(0<=month<13), 日(0<=day<32)。
输出:
每个测试数据输出一行,如果输入数据不对,输出“illegal”,否则输出它是星期几。
输入样例:
2007 11 17
输出样例:
Saturday
解题分析:
这里要考虑闰年的2月这种特殊的情况,此外还有就是当输入数据不合法时的处理,即月份或者日子(month ==0|| day==0)输出illegal。
代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int run(int n){
if(n%4!=0||(n%100==0&&n%400!=0)) return 0;
else return 1;
}
int main()
{
int y,m,d,sum=0,i;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char week[7][10]={{"Monday"},{"Tuesday"},{"Wednesday"},{"Thursday"},{"Friday"},{"Saturday"},{"Sunday"}};
while(scanf("%d %d %d",&y,&m,&d)!=EOF){
if(m==0||d==0){
printf("illegal\n");//不合法的情况
continue;
}
sum+=365*(y-1);
for(i=1;i<y;i++){
sum+=run(i);
}
for(i=1;i<m;i++){
sum+=month[i];
if(i==2) sum+=run(y);
}
sum+=(d-1);
printf("%s\n",week[(sum)%7]);
}
return 0;
}