通过具体日期计算星期几——蔡勒公式

#include <iostream> 
using namespace std;

int main()
{
	while(1)
	{
		string res[7]={"日","一","二","三","四","五","六"};
		//w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 
		int yyyy,mm,dd;
		int w,r;
		cout<<"请输入一个日期:";//yyyy年 mm月 dd日 
		cin>>yyyy>>mm>>dd;
		int c,y,m,d;
		c=(int)yyyy/100;//世纪数-1 
		y=yyyy-c*100;//本世纪第n年 
		if(mm<=2)//某年的1、2月要看作上一年的13、14月来计算 
		{
			y=y-1;
			m=mm+12;
		}
		else m=mm;
		d=dd;
		w=(int)(c/4)-2*c+y+(int)(y/4)+(int)(13*(m+1)/5)+d-1;//蔡勒公式 
		//cout<<(int)(c/4)<<" "<<-2*c<<" "<<y<<" "<<(int)(y/4)<<" "<<(int)(13*(m+1)/5)<<" "<<d-1<<endl; 
		while(w<0)w=w+7;//不能用负数求模,可以加它的循环,这是等价的,一直加到变成正数为止 
		r=w%7;
		//cout<<w<<" "<<r<<endl;
		cout<<yyyy<<"年"<<mm<<"月"<<dd<<"日是星期"<<res[r]<<endl; 
	}
}

感恩节是每年11月第四个星期四,求感恩节的日期

#include <iostream> 
using namespace std;

int Whatdayisittoday(int yyyy,int mm,int dd)
{
		string res[7]={"日","一","二","三","四","五","六"};
		//w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 
		int w,r;
		int c,y,m,d;
		c=(int)yyyy/100;//世纪数-1 
		y=yyyy-c*100;//本世纪第n年 
		if(mm<=2)//某年的1、2月要看作上一年的13、14月来计算 
		{
			y=y-1;
			m=mm+12;
		}
		else m=mm;
		d=dd;
		w=(int)(c/4)-2*c+y+(int)(y/4)+(int)(13*(m+1)/5)+d-1;//蔡勒公式 
		while(w<0)w=w+7;//不能用负数求模,可以加它的循环,这是等价的,一直加到变成正数为止 
		r=w%7;
		return r; 
}

int main()
{
	while(1)
	{
		int yyyy,mm,dd;int thur=0;
		int w,r;
		cout<<"请输入年份:";//感恩节:11月第4个星期四 
		cin>>yyyy;mm=11;dd=1; 
		while(thur<4)
		{		
			if(Whatdayisittoday(yyyy,mm,dd)==4)thur++;
			if(thur==4)break;
			dd++;
		}
		cout<<yyyy<<"年"<<mm<<"月"<<dd<<"日是感恩节。"<<endl;
	}
}
发布了115 篇原创文章 · 获赞 9 · 访问量 8123

猜你喜欢

转载自blog.csdn.net/weixin_43673589/article/details/104523941