2016年1月6日 星期三

演算法訓練 11 ─ 萬年曆 (Perpetual calendar)

http://4rdp.blogspot.com/2016/01/11-perpetual-calendar.html?m=0

其實本文的主題應該稱為星期的計算,通常萬年曆需要計算特定日子是星期幾,由於我們的年曆有閏年平年,雖然閏年看似規則變化,但是每月日期不一,難以用一個數學式表達,近日從維基百科查得 蔡勒公式 (Zeller's congruence),算是一個簡單的方法,而且這題目也適合給初學程式設計者練習,因此收錄。




w 星期,等於 0 時表示星期天
c 西元年前兩位 (千百位)
y 西元年後兩位 (十個位)
m 月份,取值範圍為3至14,1、2月要看作上一年的13、14月來計算,
                例如2003年1月1日要看作2002年的13月1日來計算,此時西元年份要減一
d 日期
[] 高斯符號,代表向下取整數,取不大於原數的最大整數。
mod 取餘數

若要計算的日期是在 1582 年 10 月 4 日或之前,公式則為

沒有留言:

張貼留言