问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【数论系列】 基姆拉尔森计算公式

创作时间:
作者:
@小白创作中心

【数论系列】 基姆拉尔森计算公式

引用
CSDN
1.
https://blog.csdn.net/qq_40772692/article/details/80330346

基姆拉尔森计算公式用于计算一周内的日期。比如给你年月日,从而计算今天是星期几。假设 d为日,m为月,y为年,则其表达式如下:

Week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7, 3<=m<=14

Week的取值范围是06,其中0代表星期日,16分别代表星期一到星期六。 注意 在运算时要把1月和2月看为是上一年的13月和14月代入计算!其模板代码如下:

int Date(int y,int m,int d)    int week = (d + 2*m +3*(m+1)/5 + y + y/4 - y/100 + y/400 + 1)%7;    return week;//其中0~6表示周日、周一到周六

例题分析

HDU6112 今夕何夕

接下来最近的哪一年里的同一个日子,和今天的星期数一样?

int Date(int y,int m,int d)    int week = (d + 2*m +3*(m+1)/5 + y + y/4 - y/100 + y/400 + 1)%7;    if((y%4==0&&y%100!=0)||y%400==0)       scanf("%d-%d-%d",&year,&month,&day);       int week = Date(year,month,day);       for(int i = year+1;i<10000;i++)//枚举判断           if(judgeYear(year)&&month==2&&day==29&&!judgeYear(i))continue;//注意特别判断第一年闰年2月29第二年不存在的情况!           if(week == Date(i,month,day)){

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号