【Leetcode1185】今天星期几

举报
野猪佩奇996 发表于 2022/01/22 23:44:12 2022/01/22
【摘要】 一.题目(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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。