今天星期几?
这样的问提在程序中常常是和日期一起来计算了。
在没接触蔡勒公式的时候,要我做我也很费劲的先去计算一更有多少天,然后在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