[讨论] 关于知道年月日计算星期的方法

hefeifei1990   2014-1-7 18:18 楼主
最近在关于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;  
}

不过不知道什么原理,有哪位大神出来解释下不

回复评论 (1)

其实就是确定的知道某一天D是星期几之后,计算已知年月日的那一天和D这一天相差多少天,然后对7取余数,就可以掐算这一天是星期几了。一顿推导演算之后整理成最终的公式。
再解释多了就是噩梦了。

有一个很著名的公式,叫蔡勒公式,就是用来计算星期的,看起来更好用一些。

这些知识在老版本《十万个为什么》数学篇里有详细介绍。
点赞  2014-1-7 22:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复