C语言根据日期判断星期几

C语言根据日期判断星期几(使用基姆拉尔森计算公式)
算法如下:
基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一

c程序简单就不列了,注意算出来取模后结果为0是星期一,1是星期二

#include<iostream>
using namespace std;
int main()
{
    int y,m,d;
    cin >> y >> m >> d;
    if(m==1||m==2){m+=12;y--;}
    cout << (int)((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400))%7;
    return 0;
}

推到过程:
d+2是在补2月挪到末位的日期差
2*m+3*(m+1)/5 实际是(-1+2*m+3*(m+1)/5)%7,实际输出值是
2 4 0 3 5 1 3 6 2 4 0 2 5 1
是每个月的误差
月 误差 累计 模7
3 3 0 0
4 2 3 3
5 3 5 5
6 2 8 1
7 3 10 3
8 3 13 6
9 2 16 2
10 3 18 4
11 2 21 0
12 3 23 2
13 3 26 5
14 - 29 1
最后y+y/4-y/100+y/400 是闰年误差

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值