今天星期几--蔡勒公式

来源:互联网 发布:网络机顶盒app软件排行 编辑:程序博客网 时间:2024/06/08 04:38

今天星期几?

这样的问提在程序中常常是和日期一起来计算了。

在没接触蔡勒公式的时候,要我做我也很费劲的先去计算一更有多少天,然后在mod7;

但是今天遇到一个了这个公式。我就来看一下。


这就是公式。

w就是我们要的周几了,c是世纪数-1(其实就是年份的前两位),y是年份的后两位,m是月份,d是天数

例如2014年5月8号  c=20 y =14 m=5 d=8;

看到这个东西是不是很喜欢啊,套上就出结果。别急,这个结果不是没天都对的,因为这里有两个特殊的月份需要处理,1月和2月,你会发现当你带入1月和2月的日子是结果不对,而其他月份的都对。因为我们要将1月当做上一年13月来处理(也就是月份改为13,年份减1),2月当做上一年的14月来处理(也就是月份改为13,年份减1)

举个例子 2014年1月1日,因为月份是一月,我们要将其改为2013年13月1日,然后在带入公式计算。

2014年2月15日 我们要改为2013年14月15日来算。

其他大于2月的都不用处理直接计算。

好了 贴上代码:

#include<iostream>using namespace std;//蔡勒公式推算星期几int weekday(int y,int m,int d){if(m==1){m=13;y--;}if(m==2){m=14;y--;}int c = y/100;y=y%100;return ((c/4)-2*c+y/4+y+(13*(m+1)/5)+d-1)%7;}int main(){int y,m,d;while(cin>>y>>m>>d){int wd=weekday(y,m,d);if(wd<0)wd+=7;switch(wd){case 6:cout<<"星期六";break;case 0:cout<<"星期天";break;case 1:cout<<"星期一";break;case 2:cout<<"星期二";break;case 3:cout<<"星期三";break;case 4:cout<<"星期四";break;case 5:cout<<"星期五";break;}cout<<endl;}return 0;}

好了!

感谢自己坚持。

1 0
原创粉丝点击