1.代码实现
#include<iostream>
#include<cstdio>
#include <cstring>
using namespace std;
bool Isleapyear(int y){
return y%4==0&&y%100!=0||y%400==0;
}
int main(){
int d,m,y,days=0,time1,time2,week,temp;
char s[20];
int datetable[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
char month[13][15]={ "","January","February","March","April","May","June","July",
"August","September","October","November","December"
};
char weeks[7][15]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
};
while(scanf("%d %s %d",&d,s,&y)){
for(m=0;m<13;m++){
if(strcmp(s,month[m])==0) break;
}//输入月份转化为数字
time1=y*10000+m*100+d;
time2=20210304;
if(time1<time2){ //输入两个一组的时间,并排列大小
temp=time2;
time2=time1;
time1=temp;
}
int d1=time1%100;
int d2=time2%100;
int y1=time1/10000;
int y2=time2/10000;
int m1=time1%10000/100;
int m2=time2%10000/100;
while(y1!=y2||m1!=m2){
days+=datetable[Isleapyear(y2)][m2]; //假设每月都从1号开始,先算月份相差的日期
if(++m2>12){
m2=1;
y2++;
}
}
days=days+d1-d2+1; //月份相差日期加上号数相差为总相差
if(y*10000+m*100+d<20210304){
week=(11-days%7)%7+1;
}else{
week=(days%7+4)%7-1;
}
printf("%s",weeks[week]);
}
return 0;
}