以下函数代表来自维基百科页面的Sakamoto算法 - http://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week
int dow(int y, int m, int d) {
/* 1 <= m <= 12, y > 1752 (in the U.K.) */
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
我不明白算法是如何工作的?特别是,t []数组。
答案 0 :(得分:2)
解释非常简单:
http://en.wikipedia.org/wiki/Leap_year
if (year is not divisible by 4) then (it is a common year)
else
if (year is not divisible by 100) then (it is a leap year)
else
if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
t []是一个每月有“#/天”偏移量的表格。
答案 1 :(得分:2)
比较的结果是int
包含0或1.所以这一行
y -= m < 3;
表示“如果月份是1月或2月,则今年的闰日尚未发生”。