这是一种查找星期几对于任何日期之间朱利叶斯·凯撒启示录,或在除非有人改变西方日历的系统。例如,您还可以使用此系统查找下一个13号星期五。我学会了用心几年前,从那时起我就再也不需要使用日历了。

你需要计算4的总和s: 一个用于世纪,一个用于在中世纪,一个用于,一个用于白天在中.

所有这些数字都已定义 7。对于例子,5等于12和至-2.

第1步:世纪编号

这个世纪编号不是一个世纪数字,因为它认为1900属于第二十世纪,那个2000属于二十一世纪等等上的。
的计算模式世纪编号不同于公历朱利安日历. The公历由介绍教皇格雷果里十三世在当年1582,但被采纳其他国家之后。例如英国的采纳了它仅在中九月 1752,您可以通过键入进行检查加利福尼亚州9 1752在Unix下。

第二步:年份编号

对于年份编号,最简单的方法是开始从以下年份开始年份编号为0。然后走到您的年份,并为您遇到的每个非闰年添加1,每个2个闰年.
以下年份有年份编号等于0(提示:如果您想通过以下方式学习此列表,请找到模式心脏):

年份编号00    04    1021 27 32 3849    55    60    6677    83    88    94

第13年99有一个年份编号等于5=99-94+1(因为有一个闰年,96,在区间内)
第19年56有一个年份编号等于2=56-55+1(因为56是闰年)
年份44BC有一个年份编号等于3因为44BC相当于57在第一位公元前世纪,以及57- 55 + 1 = 3.

第三步:月份编号

这是月份编号对于每个:

月份编号0二月(闰年),八月1二月(非闰年),三月,十一月2六月九月,十二月4一月(闰年),四月,七月5一月(非闰年),十月6五月
第4步:天数

恭喜你,这就是结局。这个天数就是这个月的第几天:17如果今天是十一月17例如,th。

把所有这些放在一起

这个总和在先前的数字中, 7,给出这个白天.0方法星期日,1方法星期一,等等。

几个例子:

============================================================日期世纪编号年份编号月份编号日期编号结果============================================================2000年11月17日1 0 1 17 19=5模式7=>星期五1752年9月2日(儒略历)1 4 3 2 10=3模块7=>周三1752年9月14日(公历)4 4 3 14 25=4模块7=>周四公元前44年3月15日-5 3 1 15 14=0模式7=>周日1969年7月1日0 4 4 21 29=1模块7=>周一============================================================

另一个例子:有多少13号星期五s在里面2000年?
解决方案:星期五是5点。减去日期13,即年份数字0和世纪1从5开始。结果是:

5-13-0-1=-9=5模块7

对应月份为十月(不是一月因为2000是一个闰年.)

在现代世界中,一项越来越重要的生存技能是思维能力计算一周中的哪一天日期瀑布。我们中的大多数人都曾因无法完成这项简单的任务而在某个时候被送进医院,导致亲人死亡,或因在公共场合裸体而感到尴尬。但无论如何,关于我已经足够了:让我们考虑一下如何最好地避免类似的命运。

下面描述的技术是由于著名数学家约翰·霍顿·康威,他将其称为末日算法康威很乐意询问新认识的人的生日,并几乎在瞬间告诉他们是哪一天星期几他们出生了;他声称(也许并非无理)是世界上最快的人类日期计算器。

首先,有一点存储是萌芽期的一项重要投资世界末日 算法列表。该技术的核心是列出康威称为“末日”--每个日期--每年的同一天都很方便。(例如,2000年,每个世界末日都是星期二。)日期如下:

1月31日(或闰年--下面解释了这种明显的荒谬)
2月28日(或闰年的29日)
3月0日(解释见下文)
4月4日
5月9日
6月6日
7月11日
8月8日
9月5日
10月10日
11月7日
12月12日
此时厌恶地放弃。通过几个技巧,这个列表很容易记住。例如,请注意,对于所有偶数除二月外,月份数等于日数:4/4、6/6、8/8、10/10、12/12。对于5月、7月、9月和11月,Conway建议使用记忆的“我在7-11从9点工作到5点”,产生日期9/5、5/9、7/11和11/7。其次,记住二月的最后一天总是世界末日——不管这是28号还是29号。这是3月1日前一天,我们再次将其列为“3月0日”有点多余的条目,但当计算日期为3月。闰年的1月末日:“1月32日”显然是指1月31日之后的第二天,尽管这不是它的正式名称。

记住这个列表后,你就可以计算任何日期了因为我们知道2000年世界末日是星期二。例如,2000年7月4日是世界末日(星期二)的七天前7月11日,因此也是星期二。2000年1月30日为二世界末日前几天(2000年是闰年,所以“1月32日”是世界末日),因此是星期天。

该技术的其余部分涉及计算世界末日任何给定年份。程序如下非常简单,经过练习只需几秒钟:

首先,我们谈论的是什么世纪?21世纪初,我们看到了,第一个世界末日世纪是星期二。1900年是一个星期三。实际上,这就是你需要做的记住,日常使用很少需要计算外部日期1900-2099. (你可以很容易地为其他人找到末日如果有必要的话,你也可以选择几个世纪。)

接下来是真正的数学卷入的。拿最后一个的两位数您正在与合作,并执行以下操作:

数一数这个数字中的打数(即除以12)
除以12时,将余数相加
在余数中加上4s(即除以4)
例如,如果我们谈论的是1995年,那么最后两位数字是95,其中12除以7,余数为11,其中4除以2倍。因此,计算得出的数字为7+11+2=20。

你刚刚找到的这个数字代表了年的末日和世纪之交的末日。在这个例子中上面,我们发现1995年的世界末日比世界末日晚了20天1900年(星期三)。为了我们的目的,七的倍数显然没有任何区别,所以我们可以放弃14天简单地说,今天比星期三晚6天,即星期二。什么这意味着在1995年,所有日期都是1月31日、2月28日,4月4日等是周二。这样很容易找到其他的通过简单方式进行日期算术.

没有什么你需要知道的了。通过发现什么来练习你一周中的哪一天出生这里有一个例子澄清一下:假设你出生于1968年10月7日。记住1900年的世界末日是星期三,我们需要知道多少1968年与之不同。12除以5得68,余数为8.四是余数的两倍。添加三个结果:5+8+2=15,其中(去掉7的几个倍数,即。,14天)是1900年世界末日的1天补偿。1968年世界末日是星期四,这特别意味着10月10日是星期四。因此,10月7日,提前三天,是星期一。


后记:这里有一个诗意的方式来描述末日算法,可能是由于凯特·拉森(Kate Larson)(至少,它出现在她的主页上网址:http://www.cs.wustl.edu/~ksl2/mathpoem.html):

2月底或1月底就可以了
(除了闰年是1月32日)
然后在偶数月内使用当月的一天,
如果是奇数,则加4,或者去掉*

现在用正统的方法计算你的末日
你应该为世纪日增添三件事
几十个,其余的四个,
(如果你改了七个当然没关系)

在朱利安时代,懒散,懒散
零点是星期天,几个世纪倒退了一天
但格里高利四百总是星期二。
现在又多了几个世纪,我们又回到了两个时代。

*根据长度或简单地记住,
你只减去九月或十一月。

当然,有末日算法,但也有一个确定一周中哪一天的数学公式,这对于在纸上或计算机程序中计算很有用。这里有一个简单的C类/C类++-像功能找到星期几从任何给定日期开始(底部有一个供非程序员使用的演练)。星期几作为整数具有:

因为有很多日历系统,除了简单地基于月、日和年进行计算外,还有第四个论点允许函数计算任意数量系统的星期几,而不是仅计算公历今天最常用的。

示例:

//开始代码

整数getDayOfWeek(整数,整数白天,整数,整数日历系统){//CalendarSystem=1用于公历
     如果(月<3){月=月+12;年=年-1;}返回(白天+(2个月)+整数(6*(月+1)/10)+年+int(年/4)-int(年/100)+int(年份/400)+日历系统)%7;}//结束代码

对于非编程人员,这里有一个示例:

假设你想确定一周中的哪一天新年1900年开始。因为我们知道这发生在1900年1月1日,所以我们只需根据上述信息填写数字:

月=1天=1年=1900日历系统=1(公历)
if(月<3){月=月+12;年=年-1;}
因为月份是1(小于3),所以我们将12加到月份上,并从年份中减去1
月=13天=1年份=1899日历系统=1(公历)
返回(白天+(2个月)+int(6*(月+1)/10)+年+int(年/4)-int(年/100)+int(年份/400)+日历系统) % 7;

现在只需替换中的值并进行计算。需要注意的是,int(x)只是指将数字转换为整数通过删除数字的小数部分(不要数字,只需删除小数点)

(1+(2*13)+int(6*(13+1)/10)+1899+int(1899/4)-int(1899/100)+int
减少为:(1+26+int(8.4)+1899+int(474.75)-int(18.99)+int(4.7475)+1)模量7
减少至:(27+8+1899+474-18+4+1)模量7
降至:2395模量7

模量就是说余数除以后,则2395/7=342R(右)1,所以一周中的第几天是1。从writeup顶部的列表中,您将看到这等同于星期一.

谢谢你十年后,假种皮,mkb公司.

#包括<stdio.h>main(){整数y;/*年*/整数m;/*月*/整数d;/*日期(天)*/int newdate;/*星期几*/printf(“请输入有问题的年份:\n”);scanf(“%d”,&y);printf(“输入月份数:\n”);扫描(“%d”,&m);如果(m<3){m=米+12;y=y-1;}printf(“输入日期:\n”);扫描(“%d”,&d);新日期=(d+(2*m)+(6*(m+1))/10)+y+(y/4)-(年/100)+(年/400)+1)%7;开关(newdate){案例0:{put(“这一天是星期天。”);断裂;}案例1:{put(“今天是星期一。”);断裂;}案例2:{put(“今天是星期二。”);断裂;}案例3:{put(“今天是星期三。”);断裂;}案例4:{put(“今天是星期四。”);断裂;}案例5:{put(“今天是星期五。”);断裂;}案例6:{put(“今天是星期六。”);断裂;}违约:{put(“你搞错了!”);}}返回0;}
那么,为什么不继续扩展语言支持吗?因为这是一个基于网络的世界PHP程序是更多髋关节而不是在旧海军,我想把这个转换成网状物-使用php作为语言的基于页面(在本例中命名为“dow.php”)。我会把代码首先,解释一下。。。


<html><头部><title>星期几<meta http-equiv=“Content-Type”Content=“text/html;charset=iso-8859-1”><头部><body><form name=“getDate”method=“post”action=“dow.php”><表border=“0”cellspacing=“0“cellpadding=“4”><tr><td nowrap><font size=“2”face=“Arial,Helvetica,sans-serif”>输入日期(mm/dd/yyyy):</font></td><td nowrap><font size=“2”face=“Arial,Helvetica,sans-serif”><input name=“mon”type=“text”size=“2”maxlength=“2”>/<input name=“day”type=“text”size=“2”maxlength=“2”>/<input name=“year”type=“text”size=“4”maxlength=“4”></font></td><td nowrap><font size=“2”face=“Arial,Helvetica,sans-serif”>例如:“1960年5月20日”</font></td></tr><tr><td><font size=“2”face=“Arial,Helvetica,sans-serif”></字体></td><td><font size=“2”face=“Arial,Helvetica,sans-serif”><input name=“submit”type=“submite”value=“submit Date”></font></td><td><font size=“2”face=“Arial,Helvetica,sans-serif”></字体></td></tr></表格></form><?php//开始php代码$fontStyle=“size=\”2\“face=\”Arial,Helvetica,sans-serif\“”;$dayStrings=数组(“星期日”、“星期一”、“周二”、“周三”、“周四”、“周五”、“周六”);if(!isset($mon)|!isset($day)|!发行($年)返回;//防止处理尚未输入的值//简单范围检查if(($mon<1)||($mon>12)||($day<1)||($day>31)||($年<0){ echo“输入的日期($mon/$day/$year)无效”;回报;}如果($mon<3){$mon=$mon+12;$year=$year-1;}如果($year<1582)//考虑格里高利日历$greg=1;其他的$greg=0;$dow=($day+(2*$mon)+(6*($mon+1))/10)+$year+($year/4)-($1year/100)+($year/400)+$greg)%7;echo“<font$fontStyle>”;//指定字体样式如果($dow>6){//trap超出范围错误echo“出现问题,日期($dow)无效”;}其他{echo“$mon/$day/$year的星期几是:<b>$dayStrings[$dow]</b>“;}echo“</font>”;?></body></html>

我试图使代码保持较小,同时仍然提供一些披萨所以它是现成的,看起来有点抛光。PHP脚本标识符(“<?PHP”和“?>”)所包含的部分很明显敲诈在这里发布的前一个C代码中,当然转换为PHP语法。其余部分很简单HTML格式数据输入和显示代码。

上面将显示一个基本的HTML表单,用户在其中输入他们感兴趣的“日期”,然后页面返回该日期所在的星期几。

你可以简单地剪切并粘贴将示例转换为编辑,将其保存到启用PHP的服务器(大多数是),然后在您的浏览器。如果更改保存的文件名除了“dow.php”之外,您还需要更改通过此名称链接到自身的表单代码(我没有使用“php_SELF”,因为它依赖于服务器配置)。

对于后代,以下是如何获取世界末日对于任何世纪:

记住这个:Sun-Tue-Wed-Fri.Century世界末日这几天中的某一天。(助记符:你的_将要_得到已婚的本周五。)

现在记住1900年=星期三(康威说的是“We-in-dis-day”,相当于日期 记忆的截至目前,但也许你的生日1900年代).

最后一件事记得“00”年总是按照相反的顺序排列在“周日-周二-周三-周五”之后。所以如果1900=周三,2000=周二。你可以排序可视化这个:

S T W F系列1600    *1700  *1800        *1900      *2000    *2100  *2200        *2300      *
我第一次读到这个http://rudy.ca/doomsday.html

如果你不喜欢记忆、加减一长串的数字,有一种简单得多的方法可用于临时的数据表外,这涉及到最少的记忆和数学技能。假设你想知道一周中的哪一天2006年10月16日摔倒了。

第1步:找出一年中每个月的第一个星期天的日期,或者如果你真正地不想工作,只要算出这个月的第一个星期日就行了。按照前一条路线,我们可以看到2006年每个月的第一个星期日(从1月份开始)如下:1 5 5 2 7 4 2 6 1 5 *

第二步:加法或减法。例如,如果我们的月份是二月,我们会看到第一个星期天是在5号,因此如果我们想知道第一个星期日是在哪一天,我们只需知道星期日之前五天是哪一天(即星期二)。回到我们的例子,我们可以通过增加7来跨越数周,直到我们足够接近这样做。由于10月的第一个星期天是1号,我们想知道16号是哪一天,所以我们把7加了两次,把我们带到了15号星期天。在那之后,我们只需要加1就可以到达16号,这意味着16号是星期一。1+7+7+1,你就完了。

此方法最困难的方面是能够变戏法在你想要的月份内:建议感兴趣的点头者学习提高记忆力,因为它既能提高记忆力,又很有趣。然而,大多数人只需要在不久的将来约会时使用这个,所以这不是什么问题。

当然,鉴于电子日历的日益普及,人们可以简单地取出自己的日历手机,但这种方法的优点是

  1. 给不了解它的人留下深刻印象(或更高级的版本)
  2. 如果你用得太多,不会导致脑癌(1)
  3. 不会被环境管理计划攻击。

资料来源:你的记忆:它是如何工作的以及如何改善的,作者:Kenneth L.Higby

*为了便于记忆,建议将这些单词分为两组或三组。等待科学研究结果.

登录登记在这里写点什么或联系作者。