题目链接:$\color{Black}{星期几}$
思路:
每月、每月的天数打表:
string month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
string week[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
long long day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
$\color{Black}{闰年:366天(点一下有介绍)}$
$\color{Black}{平年:365天(点一下有介绍)}$
判断是否是闰年?🔽
1、普通闰年:公历年份是4的倍数的,一般是闰年。(如2004年就是闰年);
2、世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是世纪闰年,2000年是世纪闰年。)
for(long long i = 1; i <= y - 1; i ++){
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){
s += 366;
}else{
s += 365;
}
}
如果是闰年,2月就是29天
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0){
day[2] = 29;
}else{
day[2] = 28;
}
n就是第几个月
for(long long i = 1; i <= 12; i++){
if(month[i] == m){
n = i;
break;
}
}
最后把所有代码合起来
就是答案啦:
#include<bits/stdc++.h>
#define __int128 long long
using namespace std;
string month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
string week[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
long long day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main(){
long long y, d;
string m;
while(cin >> d >> m >> y){
long long s = 0, c = 0, n = 0;
for(long long i = 1; i <= y - 1; i ++){
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){
s += 366;
}else{
s += 365;
}
}
if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0){
day[2] = 29;
}else{
day[2] = 28;
}
for(long long i = 1; i <= 12; i++){
if(month[i] == m){
n = i;
break;
}
}
for(long long i = 1; i <= n; i ++){
c += day[i];
}
c += d;
c --;
cout << week[(s + c) % 7] << endl;
}
return 0;
}