【ACM】星期处理

蔡勒(Zeller)公式

  1. 公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
    公式中符号含义如下,w:星期;y:年份后两位;c:世纪-1;m:月份数(m定义域是[3,14],因此蔡勒公式中某年的1、2月应看做上一年的13、14月份,此时年份和世纪作相应调整);d:当前日期数
    算出的w%7,余数是几则为星期几,余数为0即星期日。
  2. 需注意的是,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
  3. 推导过程:如何计算某一天是星期几?(Zeller公式)
  4. 代码
int zeller(int y,int m,int d)
{
    if (m<=2) y-=1,m+=12;
    int c=y/100; y-=c*100;
    int wd = (y+y/4)+(c/4-2*c)+(26*(m+1)/10)+d+6;
    return wd%7;
}

心算法

  1. 公式:w=(y+m+d)%7
    (1)看这一年的第一天是星期几就为几,如2005年1月1日是星期六就为6,2006年1月1日是星期日就为7,2007年1月1日是星期一就为1……如果这一年是闰年,3月以后的代码需要加1,如2008年1月1日是星期二,1月到2月的年份代码为2,3月到12月的年份代码就为3。还可以根据周期进行推算,因为年份的代码是每7个数字为一个周期。
    下列一组年份的代码可供记忆及推算:
    2007=1,
    2008的1~2=2,2008的3~12=3,
    2009=4,
    2010=5,
    2011=6,
    2012的1~2=7,2012的3~12=1,
    2013=2……
    (2)m:熟记歌谣“鹿儿来,五岭山,虎一撕,鹿儿死”,即12个月份依次对应6 2 2 5 0 3 5 1 4 6 2 4
    (3)d:即当前日期
  2. 推导过程:心算,怎么快速知道某年的1月1日是星期几?

猜你喜欢

转载自blog.csdn.net/qq_34898866/article/details/79573469
ACM