【Leetcode1185】今天星期几

一.题目(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);
}

二.算法思想

第一种做法:利用 ‘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];
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山顶夕景

小哥哥给我买个零食可好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值