67,562
社区成员
发帖
与我相关
我的任务
分享
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数: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
年之间的有效日期。
这个日期是在1971年往后的,因此,我们可以先算出1971年至今一共有多少天。计算过程中要注意闰年问题,同时也要注意1971年1月1日是周五。
class Solution {
public:
string dayOfTheWeek(int day, int month, int year) {
string week[7]={"Friday","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday"}; 1971年第一天为周五,因此这样排列更方便
int Mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int count=0;
for(int i=year-1;i>1971;i--){
if((i%4==0 && i%100!=0) || i%400==0)
count++;
}
int yearNum=365*(year-1971)+count; //1971年到上一年的总天数
int monthNum=0;
for(int i=0;i<month-1;i++){
if((year%4==0 && year%100!=0) || year%400==0){
Mon[1]=29;
}
else{
Mon[1]=28;
}
monthNum+=Mon[i]; //这一年,到上个月的总天数
}
int sum=yearNum+monthNum+day-1;
int n=sum%7;
return week[n];
}
};
蔡勒公式:
(来自百度百科搜索)
蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。
1,2月要当成上一年的13,14月计算。
公式:
w:星期;0--周日;1--周一……
c:世纪
y:年
m:月;1.在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算(eg.2020.1.3要看做2019.13.3);2. 3<=m<=14
d:日
[]:表示取整,只要整数部分。
class Solution {
public:
string dayOfTheWeek(int day, int month, int year) {
string week[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
if(month<3){
month+=12;
year-=1;
}
int c=year/100; //世纪
year%=100; //年
int w=c/4-2*c+year+year/4+13*(month+1)/5+day-1+210;//减的内容最大为199,为防止w为负数,则可加上一个大于199且为7的倍数的数字,如:210
return week[w%7];
}
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/day-of-the-week