今天星期几?
这样的问提在程序中常常是和日期一起来计算了。
在没接触蔡勒公式的时候,要我做我也很费劲的先去计算一更有多少天,然后在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;
}感谢自己坚持。
原文地址:http://blog.csdn.net/u010123208/article/details/25307443