最近在关于c语言的帖子看到这样的计算方法
#include
int dayofweek(int y, int m, int d)
{
static int t[]={0,3,2,5,0,3,5,1,4,6,2,4};
y -= m<3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
int main()
{
char wd[]="SumMonTueWedThuFriSat";
int y,m,d;
while (scanf("%d %d %d",&y,&m,&d)!=EOF)
printf("%.3s.\n",&wd[dayofweek(y,m,d)*3]);
}
回去后在430里面我改了
……
week_rtc=dayofweek(year_rtc,month_rtc,day_rtc);
disp_week (week_rtc); //显示星期
……
u8 dayofweek(u16 y, u8 m, u8 d) //知道年月日直接算星期的算法
{
y=2000+y; //21世纪是固定的,运算要用如2014
static u8 t[]={0,3,2,5,0,3,5,1,4,6,2,4};
y -= m<3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
不过不知道什么原理,有哪位大神出来解释下不
其实就是确定的知道某一天D是星期几之后,计算已知年月日的那一天和D这一天相差多少天,然后对7取余数,就可以掐算这一天是星期几了。一顿推导演算之后整理成最终的公式。
再解释多了就是噩梦了。
有一个很著名的公式,叫蔡勒公式,就是用来计算星期的,看起来更好用一些。
这些知识在老版本《十万个为什么》数学篇里有详细介绍。