天干地支計年的演算法

天干地支的演算法

今年海南高考歷史試題的第一題考了一道干支紀年法,問1900年八國聯軍侵華應該是什麼年(用干支表示)

題目如下:1.中國古代以干支紀年,天干是「甲、乙、丙、丁、戊、己、庚、辛、壬、癸」,地支是「子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥」。甲午戰爭發生於1894年,八國聯軍侵華的1900年應是(   )

A.己亥年    B.庚子年    C.辛丑年   D壬寅年

首先我們先要明白天干與地支是如何搭配的

天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸

地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。十天干與十二地支按順序兩兩相配,從甲子到癸亥,共六十個組合,即六十甲子。(10與12的最小公倍數是60)

1

2

3

4

5

6

7

8

9

10

11

12

甲子

乙丑

丙寅

丁卯

戊辰

己巳

庚午

辛未

壬申

癸酉

甲戌

乙亥

13

14

15

16

17

18

19

20

21

22

23

24

丙子

丁丑

戊寅

己卯

庚辰

辛巳

壬午

癸未

甲申

乙酉

丙戌

丁亥

25

26

27

28

29

30

31

32

33

34

35

36

戊子

己丑

庚寅

辛卯

壬辰

癸巳

甲午

己未

丙申

丁酉

戊戌

己亥

37

38

39

40

41

42

43

44

45

46

47

48

庚子

辛丑

壬寅

癸卯

甲辰

乙巳

丙午

丁未

戊申

己酉

庚戌

辛亥

49

50

51

52

53

54

55

56

57

58

59

60

壬子

癸丑

甲寅

乙卯

丙辰

丁巳

戊午

己未

庚申

辛酉

壬戌

癸亥

 

序號

1

2

3

4

 5

6

7

8

9

10

 

 

天干

 

 

序號

1

2

3

4

5

6

7

8

9

10

11

12

地支

1894年是甲午年,那麼1895年的天干是乙,依此類推,1900年的天干就是庚;同樣,1894年的地支是午,1900年的地支就是子;所以1900年是庚子年。如果大家還想到1901年八國聯軍脅迫清政府簽訂了《辛丑條約》,就是1901年是辛丑年,那麼天干與地支的序號都往前推一下,也可以推出來1900年是庚子年。《辛丑條約》中的所涉及的賠款,因為是針對1900年(庚子年)的義和團運動而規定,所以也叫庚子賠款。

如果沒有告訴你相鄰的某個年份是什麼年,那麼又怎樣推算呢?比如,1861年用干支紀年應是?1984年用干支紀年應是?

這裡有一個計算的公式:N=X-3-60m(0≦N﹤60,m是一個自然數)

N是60個干支的序號,比如N=1時就是甲子,X就是公元某某年。

那麼按照這個公式,1861年的序號就是:1860-3-60m,那麼就取m=29,這樣N=58,如果取m=30的話,N=-2,這時就要加60,也就是說0≦N﹤60,如果N=0,那麼就是第60個干支。現在知道與1861年對應干支是第58個,但是如果沒有上面那個表格可供查閱,怎麼辦呢?我們知道天干是10個,地支是12個,10天干與12地支按順序兩兩相配,那麼第58號對應的天乾的序號應是58÷10的餘數,餘數是8,第八個天干是申;同樣,58對應的地支的序號是58÷12的餘數,餘數是10,第十個地支是酉,所以1861年是農曆辛酉年。

所以天乾的序號A=mod(N,10),地支的序號B= mod(N,12)

(大家就是對於m應該取多少,不用去想,很簡單,就像小學生列除法算式一樣,N-3那個數除以60,所得的商數就是m, 餘數就是N)

注意:這裡的公式只適用於公元後的年份

公元前的計算公式應是N=X-2-60m,(因為公元前1年後就是公元元年也就是公元1年,沒有公元0年),(X就是一個負數了,m也取負數)

不過不知道這個公式是否準確。前面的公式N=X-3-60m來源於《簡明天文學教程》 : 餘明 ;出版社: 科學出版社。後面一個是我自己想的。

下面一個網友的帖子有一個這樣的計算方法,大家可以參考。網址是:http://www.5000han.com/bbs/thread-1258-1-1.html

(常識)天干地支的計算方法

一.西元後的:

天干:甲4 乙5 丙6 丁7 戊8 己9 庚0 辛1 壬2 癸3

如1894年末尾一個數是4就甲年,依此類推

地支:子4 丑5 寅6 卯7 辰8 巳9 午10 未11 申0 酉1 戌2 亥3 

換算:1894除以12,餘數是幾,就在地支中找幾.

二.西元前的:

天干:甲7 乙6 丙5 丁4 戊3 己2 庚1 辛0 壬9 癸8

如公元前7年就是甲年依此類推

地支:子-9 丑-8 寅-7 卯-6 辰-5 巳-4 午-3 未-2 申-1 酉0 戌-11 亥-10

換算:如公元前221年,-221除以12,餘數是幾,就在地支中找幾.


推薦閱讀:

學點演算法之字元串的亂序檢查
機器人解密:從「最大回撤」看風險控制
收藏!機器學習演算法優缺點綜述
工作十年之痛苦轉型
二叉堆

TAG:演算法 | 天干地支 | 算法 |