Q602: What Day Is It 

現行的曆法是從羅馬人演變而來的。凱撒大帝編纂了一套曆法,後人稱之為儒略曆 (Julian calendar)。在這曆法中,除了四、六、九、及十一月有30天,二月在平年有28年,在閏年有29天以外,其他的月份都是31天。再者,在這曆法中,每四年有一個閏年。這導因於古代羅馬的星象學家算出一年有365.25天,因此每隔四年就要加一天以保持曆法和季節的一致。於是,他們就在四的倍數的年份多加了一天 (二月29) 

儒略法:

四的倍數的年份均為閏年,這年會多一天 (二月29)

1582年,教宗格勒哥里 (Gregory) 的星象學家發現一年並不是365.25天,而是比較接近365.2425天。因此,閏年的規則便修正如下: 

格瑞哥里法:

除了不是400的倍數的100的倍數以外,四的倍數的年份均為閏年。

為了要彌補截至當時季節和日曆已產生的誤差,當時的日曆便往前挪移了10天:1582104的第二天為1015

英格蘭和它的帝國 (包括美國) 一直到1752年才改用格瑞哥里曆,當年的92的第二天為914(未同步採用新曆乃肇因於亨利八世和教宗的惡劣關係。)

寫一個程式可以依美國當時的曆法來轉換日期,並印出星期幾。

輸入

程式的輸入為一連串的大於0的正整數,每一行有3個整數,代表一個日期。日期的格式為 " ",其中月份以1 (表示一月) 12 (表示十二月) 的數字來代表,日則是一個131間的數字,而年則為正數。

輸出

程式的輸出則為依範例格式所輸入的日期和那天星期幾。不正確的日期或依美國當時的曆法不存在的日期則應產生一個錯誤訊息告知日期不正確。輸入的結束會有三個0 請參考範例輸出。

範例輸入

1 1 1
10 4 1582
10 5 1582
1 1 2000
7 4 1998
2 11 1732
9 2 1752
9 3 1752
9 14 1752
4 33 1997
11 15 1997
12 9 2005
0 0 0

範例輸出

January 1, 1 is a Saturday
October 4, 1582 is a Thursday
October 5, 1582 is a Friday
January 1, 2000 is a Saturday
July 4, 1998 is a Saturday
February 11, 1732 is a Friday
September 2, 1752 is a Wednesday
9/3/1752 is an invalid date.
September 14, 1752 is a Thursday
4/33/1997 is an invalid date.
November 15, 1997 is a Saturday
December 9, 2005 is a Friday

Miguel A. Revilla
1999-03-24
郭兆平譯
2005-10-26