计算出输入日期距1年0月0日的天数,然后对7取模,根据余数即可推出该天为星期几。
对于1年0月0日,由样例2007 11 17为周六可以推出:1年0月0日为周天
代码如下,主要是不合法部分有点复杂,另外注意判断是否为闰年就行了。
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int month1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int y,m,d,day;
while(cin>>y>>m>>d)
{
day=0;
if(m*d==0)
{
puts("illegal");
continue;
}
if((y%400==0)||(y%4==0&&y%100!=0))
{
if(d>month1[m])
{
puts("illegal");
continue;
}
}
else
{
if(d>month[m])
{
puts("illegal");
continue;
}
}
for(int i=1;i<y;i++)
{
if((i%400==0)||(i%100!=0&&i%4==0)) day+=366;
else d+=365;
}
for(int i=1;i<m;i++)
day+=month[i];
if((m>2)&&((y%400==0)||(y%4==0&&y%100!=0))) day++;
day+=d;
int ans=day%7;
switch(ans)
{
case 6:puts("Saturday");break;
case 0:puts("Sunday");break;
case 1:puts("Monday");break;
case 2:puts("Tuesday");break;
case 3:puts("Wednesday");break;
case 4:puts("Thursday");break;
case 5:puts("Friday");break;
}
}
return 0;
}