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 yearrespectively.
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
1971and2100.
思路:
除了像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];
}
};