今天星期几:
对于给定的日期,求出今天是星期几,从元年1年1月1日起。
#include <iostream>
#include <cstdio>
using namespace std;
//对于给定的日期,判断是星期几
void week(int y,int m,int d)
{
//e代表着 从今年的1月1日到目前的天数
int t,e;
switch(m)
{
case 1:
e=d;
break;
case 2:
e=31+d;
break;
case 3:
e=59+d;
break;
case 4:
e=90+d;
break;
case 5:
e=120+d;
break;
case 6:
e=151+d;
break;
case 7:
e=181+d;
break;
case 8:
e=212+d;
break;
case 9:
e=243+d;
break;
case 10:
e=273+d;
break;
case 11:
e=304+d;
break;
case 12:
e=334+d;
break;
}
//如果是润年,天数需要加1
if((y%4==0&&y%100!=0)||(y%400==0))
if(m>2) ++e;
--y;
/*
**t=365*y+y/4-y/100+y/400+e;
**t=(52*7+1)*y+y/4-y/100+y/400+e;
**y/4-y/100+y/400 代表从元年到今年 闰年多出的天数
**t%=7;与t=y+y/4-y/100+y/400+e;t=t%7;相同故:
*/
//类似一个小知识:去年的今天 在星期上 要比今年的今天少一
t=y+y/4-y/100+y/400+e;
t=t%7;
if(t==1)
printf("Monday\n");
else if(t==2)
printf("Tuesday\n");
else if(t==3)
printf("Wednesday\n");
else if(t==4)
printf("Thursday\n");
else if(t==5)
printf("Friday\n");
else if(t==6)
printf("Saturday\n");
else
printf("Sunday\n");
}
int main()
{
//从输出结果上看 确实在星期上面少一
week(2013,8,15);
week(2014,8,15);
return 0;
}