我使用了一个简单的C程序来查找给定日期的日期。为此,我写了很多行来计算日期和月份,并找出给定年份的种类。冲浪时我开始了解一行代码,以找到给定日期的日期。代码如下
( d += m < 3 ? y --: y- 2, 23 * m / 9 + d + 4 + y / 4 - y / 100 + y / 400) % 7 ;
// 0 - 星期日,6 - 星期六 它为所有输入提供了正确答案,但我无法理解此表达式中使用的值。
请让我知道这背后的逻辑是什么,我试图解决这些问题。
答案 0 :(得分:0)
到目前为止我发现了什么:
23 * m / 9
导致
1 2 3
2 5 2
3 7 3
4 10 2
5 12 3
6 15 2
7 17 3
8 20 3
9 23 2
10 25 3
11 28 2
12 30 3
此表达式将超过的天数添加到一个月的28天。
表达式y / 4 - y / 100 + y / 400
导致:
1995 483 0
1996 484 1
1997 484 1
1998 484 1
1999 484 1
2000 485 2
2001 485 2
结果,每4年增加一天(闰年除外)
因为每年365天(mod 7 == 1)将工作日增加1,所以年份会添加到日期。
表达式d + (m < 3 ? y --: y- 2)
用于更正闰年计算。如果我们有闰年,只有当我们有一个月> = 3月时,我们才能纠正一天。