【Leetcode1185】今天星期几
【摘要】
一.题目(easy)
闰年or平年
能被4整除的年份是闰年,不能被4整除的年份是平年。 如:1988年2008年是闰年;2005年2006年2007年是平年。 但是如果是世纪年(也就是整百年),就...
一.题目(easy)
闰年or平年
能被4整除的年份是闰年,不能被4整除的年份是平年。
如:1988年2008年是闰年;2005年2006年2007年是平年。
但是如果是世纪年(也就是整百年),就只有能被400整除才是闰年,否则就是平年。如:2000年就是闰年,1900年就是平年。
闰年的2月有29天,平年的2月只有28天。
注意:1971年1月1日是星期五。
判断闰年条件
①:非整百年数除以4,无余为闰,有余为平;
②整百年数除以400,无余为闰有余平
即判断是否为闰年代码为:
bool isLeap(int year){//判断是否为闰年
return(year%4==0&&year%100!=0)(year%400==0);
}
- 1
- 2
- 3
二.算法思想
第一种做法:利用 ‘ACM数论’ c++
----基姆拉尔森计算公式计算(今天计算星期几)——不过菜鸡我记不住鸭
参考链接:https://blog.csdn.net/qq_40772692/article/details/80330346
第二种做法:计算从当前日期到1971年1月1日的天数,再加4后mod7。
三.代码
class Solution {
int daysOfMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
vector<string> Week = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int daysFrom19710101(int day, int month, int year){
int res = 365*(year-1971)+day-1;
for(int i=1;i<month;i++)
res+=daysOfMonth[i];
for(int i=1971;i<=year;i++){
if((i%4==0 && i%100!=0) ||(i%400==0)){
if(i<year || (i==year && month>2))
res++;
}
}
return res;
}
public:
string dayOfTheWeek(int day, int month, int year) {
return Week[(4 + daysFrom19710101(day, month, year))%7];
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/112196693
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)