看了题解有蔡勒公式,其实以之前的日期为一个基准点硬算也是可以的。不过我是以今天为基准的,但是不知道怎么过了用例(滑稽.jpg),按理说2022年后的用例应该过不了啊
class Solution {
public:
string dayOfTheWeek(int day, int month, int year) {
int totalDays = 0; // 相差的总天数
array<int, 12> monthDays{ 31,28,31,30,31,30,31,31,30,31,30,31 };
const int pyearDays = 365;
// 算年
for (int i = (year + 1); i <= 2021; i++) {
if (i % 400 == 0 || ((i % 4 == 0) && (i % 100 != 0))) {
// 闰年
totalDays += (pyearDays + 1);
}
else {
totalDays += pyearDays;
}
}
// 算月
for (int i = (month + 1); i <= 12; i++) {
totalDays += monthDays[i-1];
if (i == 2) {
if (year % 400 == 0 || ((year % 4 == 0) && (year % 100 != 0))) {
// 第1年是润年
totalDays += 1; // 2月多1天
}
}
}
// 算天
int monthday = monthDays[month - 1];
if (month == 2) {
// 如果是2月又是润年
if (year % 400 == 0 || ((year % 4 == 0) && (year % 100 != 0))) {
monthday += 1;
}
}
totalDays += ( monthday - day);
// 到2022年1月3日
totalDays += 3;
int distance = totalDays % 7;
array<string, 7> week{"Monday","Sunday","Saturday","Friday","Thursday","Wednesday","Tuesday"};
return week[distance];
}
};