#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;
}
}
Día de Acción de Gracias es la fecha en que el cuarto jueves de noviembre de cada año, en busca de Acción de Gracias
#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;
}
}