题目
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数: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"
解题
方法一:模拟
只要计算距离1970年12月31日距离当日有几天,然后根据1970年12月31日是星期四就可以推算出当天是星期几。
class Solution { public: string dayOfTheWeek(int day, int month, int year) { vector<string> week={"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"}; vector<int> monthDays={31,28,31,30,31,30,31,31,30,31,30}; int days=0; //计算1970年12月31日至year-1年的12月31日 有多少天 for(int i=1971;i<year;i++){ if(i%400==0||(i%4==0&&i%100!=0)) days+=366; else days+=365; } //计算1月到month-1月有几天 for(int i=0;i<month-1;i++){ days+=monthDays[i]; } //如果闰年且大于2月,就多一天。 if(((year)%400==0||(year%4==0&&year%100!=0))&&month>=3) days++; //加上当月的日子。 days+=day; return week[(days+3)%7]; } };