题目描述
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。
示例 1:
输入:day = 31, month = 8, year = 2019
输出:”Saturday”
示例 2:
输入:day = 18, month = 7, year = 1999
输出:”Sunday”
示例 3:
输入:day = 15, month = 8, year = 1993
输出:”Sunday”
提示:
给出的日期一定是在 1971 到 2100 年之间的有效日期。
题解
基姆拉尔森计算公式
W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
string CaculateWeekDay(int y, int m, int d) {
string res;
if(m == 1 || m == 2) {
m += 12;
y--;
}
int Weekday = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
switch(Weekday) {
case 0:
res = "Monday";
break;
case 1:
res = "Tuesday";
break;
case 2:
res = "Wednesday";
break;
case 3:
res = "Thursday";
break;
case 4:
res = "Friday";
break;
case 5:
res = "Saturday";
break;
case 6:
res = "Sunday";
break;
}
return res;
}
class Solution {
public:
string dayOfTheWeek(int day, int month, int year) {
return CaculateWeekDay(year, month, day);
}
};