问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何计算出一年的第一天是星期几?

发布网友 发布时间:2022-04-25 10:41

我来回答

5个回答

热心网友 时间:2022-04-25 12:11

利用蔡勒公式计算。

公式如下:

符号意义:

1、w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六

2、c:世纪(注:一般情况下,在公式中取值为已经过的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加一;

不过如果年份是公元前的年份且非整百数的话,c应该等于所在世纪的编号,如公元前253年,是公元前3世纪,c就等于-3)

3、y:年(一般情况下是后两位数,如果是公元前的年份且非整百数,y应该等于cMOD100+100)

4、m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)

5、d:日

扩展资料

适用范围

蔡勒公式只适合于1582年(中国明朝万历十年)10月15日之后的情形。罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。

将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。后来人们将这一新的历法称为“格里高利历”,也就是今天世界上所通用的历法,简称格里历或公历。

c++代

#include<iostream>usingnamespacestd;int main(){int year,month,day;while(cin>>year>>month>>day){if(month<3){year-=1;month+=12;}charb[7][10]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};int c=int(year/100),y=year-100*c;int w=int(c/4)-2*c+y+int(y/4)+(26*(month+1)/10)+day-1;w=(w%7+7)%7;cout<<b[w]<<endl;}return 0;}

参考资料来源:百度百科-蔡勒公式

热心网友 时间:2022-04-25 13:29

 —— 蔡勒(Zeller)公式
  历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

  公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)

  算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。

  以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:
  蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
  =49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
  =49+[12.25]+5-40+[28.6]
  =49+12+5-40+28
  =54 (除以7余5)
  即2049年10月1日(100周年国庆)是星期5。

  你的生日(出生时、今年、明年)是星期几?不妨试一试。

  不过,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。

  过程的推导:(对推理不感兴趣的可略过不看)

  星期制度是一种有古老传统的制度。据说因为《圣经·创世纪》中规定上帝用了六
  天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生
  活,而星期日是休息日。从实际的角度来讲,以七天为一个周期,长短也比较合适。所
  以尽管中国的传统工作周期是十天(比如王勃《滕王阁序》中说的“十旬休暇”,即是
  指*的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。

  在日常生活中,我们常常遇到要知道某一天是星期几的问题。有时候,我们还想知
  道历史上某一天是星期几。通常,解决这个方法的有效办法是看日历,但是我们总不会
  随时随身带着日历,更不可能随时随身带着几千年的万年历。假如是想在计算机编程中
  计算某一天是星期几,预先把一本万年历存进去就更不现实了。这时候是不是有办法通
  过什么公式,从年月日推出这一天是星期几呢?

  答案是肯定的。其实我们也常常在这样做。我们先举一个简单的例子。比如,知道
  了2004年5月1日是星期六,那么2004年5月31日“世界无烟日”是星期几就不难推算出
  来。我们可以掰着指头从1日数到31日,同时数星期,最后可以数出5月31日是星期一。
  其实运用数学计算,可以不用掰指头。我们知道星期是七天一轮回的,所以5月1日是星
  期六,七天之后的5月8日也是星期六。在日期上,8-1=7,正是7的倍数。同样,5月15
  日、5月22日和5月29日也是星期六,它们的日期和5月1日的差值分别是14、21和28,也
  都是7的倍数。那么5月31日呢?31-1=30,虽然不是7的倍数,但是31除以7,余数为2,
  这就是说,5月31日的星期,是在5月1日的星期之后两天。星期六之后两天正是星期一。

  这个简单的计算告诉我们计算星期的一个基本思路:首先,先要知道在想算的日子
  之前的一个确定的日子是星期几,拿这一天做为推算的标准,也就是相当于一个计算的
  “原点”。其次,知道想算的日子和这个确定的日子之间相差多少天,用7除这个日期
  的差值,余数就表示想算的日子的星期在确定的日子的星期之后多少天。如果余数是
  0,就表示这两天的星期相同。显然,如果把这个作为“原点”的日子选为星期日,那
  么余数正好就等于星期几,这样计算就更方便了。

  但是直接计算两天之间的天数,还是不免繁琐。比如1982年7月29日和2004年5月
  1日之间相隔7947天,就不是一下子能算出来的。它包括三段时间:一,1982年7月29
  日以后这一年的剩余天数;二,1983-2003这二十一个整年的全部天数;三,从2004年
  元旦到5月1日经过的天数。第二段比较好算,它等于21*365+5=7670天,之所以要加
  5,是因为这段时间内有5个闰年。第一段和第三段就比较麻烦了,比如第三段,需要把
  5月之前的四个月的天数累加起来,再加上日期值,即31+29+31+30+1=122天。同理,第
  一段需要把7月之后的五个月的天数累加起来,再加上7月剩下的天数,一共是155天。
  所以总共的相隔天数是122+7670+155=7947天。

  仔细想想,如果把“原点”日子的日期选为12月31日,那么第一段时间也就是一个
  整年,这样一来,第一段时间和第二段时间就可以合并计算,整年的总数正好相当于两
  个日子的年份差值减一。如果进一步把“原点”日子选为公元前1年12月31日(或者天文
  学家所使用的公元0年12月31日),这个整年的总数就正好是想算的日子的年份减一。这
  样简化之后,就只须计算两段时间:一,这么多整年的总天数;二,想算的日子是这一
  年的第几天。巧的是,按照公历的年月设置,这样反推回去,公元前1年12月31日正好是
  星期日,也就是说,这样算出来的总天数除以7的余数正好是星期几。那么现在的问题就
  只有一个:这么多整年里面有多少闰年。这就需要了解公历的置闰规则了。

  我们知道,公历的平年是365天,闰年是366天。置闰的方法是能被4整除的年份在
  2月加一天,但能被100整除的不闰,能被400整除的又闰。因此,像1600、2000、2400
  年都是闰年,而1700、1800、1900、2100年都是平年。公元前1年,按公历也是闰年。

  因此,对于从公元前1年(或公元0年)12月31日到某一日子的年份Y之间的所有整年
  中的闰年数,就等于

  [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400],

  [...]表示只取整数部分。第一项表示需要加上被4整除的年份数,第二项表示需要去掉
  被100整除的年份数,第三项表示需要再加上被400整除的年份数。之所以Y要减一,这
  样,我们就得到了第一个计算某一天是星期几的公式:

  W = (Y-1)*365 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (1)

  其中D是这个日子在这一年中的累积天数。算出来的W就是公元前1年(或公元0年)12月
  31日到这一天之间的间隔日数。把W用7除,余数是几,这一天就是星期几。比如我们来
  算2004年5月1日:

  W = (2004-1)*365 + [(2004-1)/4] - [(2004-1)/100] + [(2004-1)/400] +
  (31+29+31+30+1)
  = 731702,

  731702 / 7 = 104528……6,余数为六,说明这一天是星期六。这和事实是符合的。

  上面的公式(1)虽然很准确,但是计算出来的数字太大了,使用起来很不方便。仔
  细想想,其实这个间隔天数W的用数仅仅是为了得到它除以7之后的余数。这启发我们是
  不是可以简化这个W值,只要找一个和它余数相同的较小的数来代替,用数论上的术语
  来说,就是找一个和它同余的较小的正整数,照样可以计算出准确的星期数。

  显然,W这么大的原因是因为公式中的第一项(Y-1)*365太大了。其实,

  (Y-1)*365 = (Y-1) * (364+1)
  = (Y-1) * (7*52+1)
  = 52 * (Y-1) * 7 + (Y-1),

  这个结果的第一项是一个7的倍数,除以7余数为0,因此(Y-1)*365除以7的余数其实就
  等于Y-1除以7的余数。这个关系可以表示为:

  (Y-1)*365 ≡ Y-1 (mod 7).

  其中,≡是数论中表示同余的符号,mod 7的意思是指在用7作模数(也就是除数)的情
  况下≡号两边的数是同余的。因此,完全可以用(Y-1)代替(Y-1)*365,这样我们就得到
  了那个著名的、也是最常见到的计算星期几的公式:

  W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D. (2)

  这个公式虽然好用多了,但还不是最好用的公式,因为累积天数D的计算也比较麻
  烦。是不是可以用月份数和日期直接计算呢?答案也是肯定的。我们不妨来观察一下各
  个月的日数,列表如下:

  月 份:1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
  --------------------------------------------------------------------------
  天 数: 31 28(29) 31 30 31 30 31 31 30 31 30 31

  如果把这个天数都减去28(=4*7),不影响W除以7的余数值。这样我们就得到另一张
  表:

  月 份:1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
  ------------------------------------------------------------------------
  剩余天数: 3 0(1) 3 2 3 2 3 3 2 3 2 3
  平年累积: 3 3 6 8 11 13 16 19 21 24 26 29
  闰年累积: 3 4 7 9 12 14 17 20 22 25 27 30

  仔细观察的话,我们会发现除去1月和2月,3月到7月这五个月的剩余天数值是3,2,3,2,
  3;8月到12月这五个月的天数值也是3,2,3,2,3,正好是一个重复。相应的累积天数中,
  后一月的累积天数和前一月的累积天数之差减去28就是这个重复。正是因为这种规律的
  存在,平年和闰年的累积天数可以用数学公式很方便地表达:

  ╭ d; (当M=1)
  D = { 31 + d; (当M=2) (3)
  ╰ [ 13 * (M+1) / 5 ] - 7 + (M-1) * 28 + d + i. (当M≥3)

  其中[...]仍表示只取整数部分;M和d分别是想算的日子的月份和日数;平年i=0,闰年
  i=1。对于M≥3的表达式需要说明一下:[13*(M+1)/5]-7算出来的就是上面第二个表中的
  平年累积值,再加上(M-1)*28就是想算的日子的月份之前的所有月份的总天数。这是一
  个很巧妙的办法,利用取整运算来实现3,2,3,2,3的循环。比如,对2004年5月1日,有:

  D = [ 13 * (5+1) / 5 ] - 7 + (5-1) * 28 + 1 + 1
  = 122,

  这正是5月1日在2004年的累积天数。

  假如,我们再变通一下,把1月和2月当成是上一年的“13月”和“14月”,不仅仍
  然符合这个公式,而且因为这样一来,闰日成了上一“年”(一共有14个月)的最后一
  天,成了d的一部分,于是平闰年的影响也去掉了,公式就简化成:

  D = [ 13 * (M+1) / 5 ] - 7 + (M-1) * 28 + d. (3≤M≤14) (4)

  上面计算星期几的公式,也就可以进一步简化成:

  W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1) / 5 ] - 7
  + (M-1) * 28 + d.

  因为其中的-7和(M-1)*28两项都可以被7整除,所以去掉这两项,W除以7的余数不变,
  公式变成:

  W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1) / 5 ] + d.
  (5)

  当然,要注意1月和2月已经被当成了上一年的13月和14月,因此在计算1月和2月的日子
  的星期时,除了M要按13或14算,年份Y也要减一。比如,2004年1月1日是星期四,用这
  个公式来算,有:

  W = (2003-1) + [(2003-1)/4] - [(2003-1)/100] + [(2003-1)/400] + [13*(13+1)/5]
  + 1
  = 2002 + 500 - 20 + 5 + 36 + 1
  = 2524;
  2524 / 7 = 360……4.这和实际是一致的。

  公式(5)已经是从年、月、日来算星期几的公式了,但它还不是最简练的,对于年
  份的处理还有改进的方法。我们先来用这个公式算出每个世纪第一年3月1日的星期,列
  表如下:

  年份: 1(401,801,…,2001) 101(501,901,…,2101)
  --------------------------------------------------------------------
  星期: 4 2
  ====================================================================
  年份:201(601,1001,…,2201) 301(701,1101,…,2301)
  --------------------------------------------------------------------
  星期: 0 5

  可以看出,每隔四个世纪,这个星期就重复一次。假如我们把301(701,1101,…,2301)
  年3月1日的星期数看成是-2(按数论中对余数的定义,-2和5除以7的余数相同,所以可
  以做这样的变换),那么这个重复序列正好就是一个4,2,0,-2的等差数列。据此,我们
  可以得到下面的计算每个世纪第一年3月1日的星期的公式:

  W = (4 - C mod 4) * 2 - 4. (6)

  式中,C是该世纪的世纪数减一,mod表示取模运算,即求余数。比如,对于2001年3月
  1日,C=20,则:

  W = (4 - 20 mod 4) * 2 - 4
  = 8 - 4
  = 4.

  把公式(6)代入公式(5),经过变换,可得:

  (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] ≡ (4 - C mod 4) * 2 - 1
  (mod 7). (7)

  因此,公式(5)中的(Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400]这四项,在计算
  每个世纪第一年的日期的星期时,可以用(4 - C mod 4) * 2 - 1来代替。这个公式写
  出来就是:

  W = (4 - C mod 4) * 2 - 1 + [13 * (M+1) / 5] + d. (8)

  有了计算每个世纪第一年的日期星期的公式,计算这个世纪其他各年的日期星期的公式
  就很容易得到了。因为在一个世纪里,末尾为00的年份是最后一年,因此就用不着再考
  虑“一百年不闰,四百年又闰”的规则,只须考虑“四年一闰”的规则。仿照由公式(1)
  简化为公式(2)的方法,我们很容易就可以从式(8)得到一个比公式(5)更简单的计算任意
  一天是星期几的公式:

  W = (4 - C mod 4) * 2 - 1 + (y-1) + [y/4] + [13 * (M+1) / 5] + d. (9)

  式中,y是年份的后两位数字。

  如果再考虑到取模运算不是四则运算,我们还可以把(4 - C mod 4) * 2进一步改写
  成只含四则运算的表达式。因为世纪数减一C除以4的商数q和余数r之间有如下关系:

  4q + r = C,

  其中r即是 C mod 4,因此,有:

  r = C - 4q
  = C - 4 * [C/4]. (10)

  则

  (4 - C mod 4) * 2 = (4 - C + 4 * [C/4]) * 2
  = 8 - 2C + 8 * [C/4]
  ≡ [C/4] - 2C + 1 (mod 7). (11)

  把式(11)代入(9),得到:

  W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1. (12)

  这个公式由世纪数减一、年份末两位、月份和日数即可算出W,再除以7,得到的余数是
  几就表示这一天是星期几,唯一需要变通的是要把1月和2月当成上一年的13月和14月,
  C和y都按上一年的年份取值。因此,人们普遍认为这是计算任意一天是星期几的最好的
  公式。这个公式最早是由德国数学家克里斯蒂安·蔡勒(Christian Zeller, 1822-
  1899)在1886年推导出的,因此通称为蔡勒公式(Zeller’s Formula)。为方便口算,
  式中的[13 * (M+1) / 5]也往往写成[26 * (M+1) / 10]。

  现在仍然让我们来算2004年5月1日的星期,显然C=20,y=4,M=5,d=1,代入蔡勒
  公式,有:

  W = [20/4] - 40 + 4 + 1 + [13 * (5+1) / 5] + 1 - 1
  = -15.

  注意负数不能按习惯的余数的概念求余数,只能按数论中的余数的定义求余。为了方便
  计算,我们可以给它加上一个7的整数倍,使它变为一个正数,比如加上70,得到55。
  再除以7,余6,说明这一天是星期六。这和实际是一致的,也和公式(2)计算所得的结
  果一致。

  最后需要说明的是,上面的公式都是基于公历(格里高利历)的置闰规则来考虑
  的。对于儒略历,蔡勒也推出了相应的公式是:

  W = 5 - C + y + [y/4] + [13 * (M+1) / 5] + d - 1. (13)

  这样,我们终于一劳永逸地解决了不查日历计算任何一天是星期几的问题。

热心网友 时间:2022-04-25 15:03

原理如下:
1年1月1日是星期一.这个程序从1年1月1日开始算到第Y年共有多少天,然后取7的余数即是所求的星期.

热心网友 时间:2022-04-25 16:55

首先要知道这一年的第一天或者任何一天是星期几,然后知道要计算的这一天是这一年的第几天,然后余7,就可以推出来了

热心网友 时间:2022-04-25 21:27

{"launch_rec_request": {"content": {"extra_key": "task_id=41157&page_id=4&mod_id=404&task_owner=10&vid=u08668fe2er&cid=&lid=0×tamp=1556945128063", "task_owner": 10}}}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
杭州皮衣修理哪里更专业? 天津才梓教育科技有限公司怎么样? 2006年天津教师资格证何时报名?在哪报名? 高考填志愿怎么查学校专业代码 高考志愿填报代码查询 专科志愿填报代码如何查询 精挑细选(找出不是同一类的词语,用你喜欢的标志画出)。 1.龙凤呈祥 叶... 找出不同类的词。 慧眼识真。(找出不同类的词语并写在横线上) 1.勇敢 沉着 狡猾 ... 诚实,勇敢,善良,狡猾,乐于助人找出不同类 电脑怎么登录两个 电脑怎么登录两个 摔了一跤,牛仔裤破了一个洞,怎么办啊,或者设计一个破洞牛仔裤,或者缝上,有没有好的方法呢 社会学概念有哪些 不同学者对社会学的定义 社会学包括了什么 上海证券报能在手机上看吗 新时代通达信手机版上海证券一卡通怎么登录不上去 社会学的含义 社会学的定义? 社会学是什么概念 社会学 是什么 手机版上海证券怎么登不上去啊,无此功能服务 新生儿新农合参保以后多久生效。希望大家不要复制粘贴? 杨梅的外貌形态是什么? 新生儿交的农合多久能传到医保系统 想办个联通合约机,有吧友能帮助下么 哪能办理合约机 上海哪里的联通营业厅可以办理魅族四的合约机 微信好友资料里没有手机号,怎么用查到手机号? 数字神断中提到流年太岁为虚数是什么意意思 数字神断生辰起流年大运 九天玄数的基本信息 那2-3为什么是绝数 49数字画园预测学是如何用 料事如神断阴阳打一数字 2010年会计科目表EXCEL表格! 表达爱国思想的古诗 会计科目汇总表EXCEL下载 求会计科目汇总表,全套财务报表模板,电子表格格式EXCEL 带公式版的有? 求会计科目汇总表,全套财务报表模板,电子表格格式EXCEL 带公式版的有的话请发 电脑如何登录两个 电脑如何登录两个 电脑如何登录两个 电脑如何登录两个 朱砂鸡血混在一起会不会很快变僵 朱砂和鸡血能辟邪 在住房门前埋朱砂鸡血桃木和钢针做八卦能镇宅吗有没有妨碍自己 能用鸡血和朱砂写字放在床下吗? 鸡血和白酒朱砂搅拌一起鸡血如何让鸡血不凝固