Given a date, return the corresponding day of the week for that date.
The input is given as three integers representing the day
, month
and year
respectively.
Return the answer as one of the following values {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
.
Example 1:
Input: day = 31, month = 8, year = 2019 Output: "Saturday"
Example 2:
Input: day = 18, month = 7, year = 1999 Output: "Sunday"
Example 3:
Input: day = 15, month = 8, year = 1993 Output: "Sunday"
Constraints:
- The given dates are valid dates between the years
1971
and2100
.
思路:
除了像python的datetime类方便的计算,还有一些基本公式,如下,
当然,我们还是从小学生计算题的角度来解答此题。
首先找一个参考点,比方说1971年1月1日,这天使Friday,找到这个锚点,在计算给出的日子与这一天的days天数差,然后mod 7即可。
class Solution {
public:
string dayOfTheWeek(int day, int month, int year) {
int sum = 0;
for(int i = 1971; i < year; i++)
{
if((i % 400 == 0) or((i % 4 == 0) and (i % 100 != 0)))
{
sum += 366;
}
else
sum += 365;
}
bool isLeap = false;
if(year % 400 == 0 or(year % 4 == 0 and year % 100 != 0))
isLeap = true;
for(int i = 1; i < month; i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
sum += 31;
break;
case 2:
if(isLeap)
sum += 29;
else
sum += 28;
break;
case 4:
case 6:
case 9:
case 11:
sum += 30;
break;
}
}
sum = sum + day;
int left = (sum - 1) % 7;
vector<string> week{"Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"};
return week[left];
}
};