Day of Week很好记录一下

本算法中引用的是由Tomohiko Sakamoto 提供的简洁函数代码

代码如下:

整体思路如下将一年看成364天(可以被7整除)

其中如果将2月看成27天

//31 27 31 30 31 30 31 31 30 31 30 31
//3  6  3  2  3  2  3  3  2  3  2  3  月天数mod7
//3  9  12 14 17 19 22 25 27 30 32 35 月数的累加和
//0  3  2  5  0  3  5  1  4  6  2  4  月数-1的累加和mod7得到数组

如1年2月某日

1月有31天被7除余3 多出的3天加到2月的天数里

最后对7取余

y/4 - y/100 + y/400 //算出到y年12月31日为止的闰年多出29号天数的个数

y + y/4 - y/100 + y/400//上市加上y年12月31日为止每年少算一天的个数

当x年y月z日时

如果月数小于2月 则应当计算y-1年多出的天数

即y -= m < 3;

y + y/4 - y/100 + y/400 + t[m-1] + d/*加上1到m-1月多出天数对7取余再加上当月的天数*/

最后对7求余的出星期。

1年1月1日为星期一

[cpp]  view plain copy
  1. int dayofweek(int y, int m, int d) /* 0 = Sunday */  
  2. {  
  3.        static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};  
  4.        y -= m < 3;  
  5.        return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值