今日星期几-蔡勒公式

今天星期几--蔡勒公式

今天星期几?

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

在没接触蔡勒公式的时候,要我做我也很费劲的先去计算一更有多少天,然后在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;
}

好了!

感谢自己坚持。