演算法題接雨水
❶ 天乾地支紀年演算法(請看問題補充)
天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。
地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。
具體的計算方法為:
(年份-3)/10餘數為天干
(年份-3)/12餘數為地支
把天干數和地支數合並起來,即為所求的干支年份。
再答:
看看這樣的演算法可以不
具體的計算方法為:
天干:年份÷10,得到的商不管,看余數,若余數-3得正,則按天干順序往下數,得數即為天干順序數,若余數-3為負,則+10,得到的數即為天干數,若余數為3,則為天乾的最後一位,即癸。
地支:年份÷12,得到的商不管,看余數,若余數-3得正,則按地支順序往下數,得數即為地支順序數。若余數-3為負,則+12,得到的數即為地支順序數,若余數為3,則為地支的最後一位,即亥。
把天干數和地支數合並起來,即為所求的干支年份。
如:2001年查萬年歷為辛巳年,演算法為:
2001÷10=200……1,1—3=—2,—2+10=8,按天干順序數到8,甲、乙、丙、丁、戊、己、庚、辛。第8位為辛。
2001÷12=166……9,9—3=6,按地支順序數到6,子、丑、寅、卯、辰、巳。第6位為巳。
按照以上計算結果,把天干、地支合並起來可知,2001年為辛巳年。
❷ 怎麼計算天乾地支的演算法大神們幫幫忙
天乾地支簡稱「干支」,取義於樹木的乾和枝 天干有十:甲、乙、丙、丁、戊(wù)、己、庚、辛、壬(rén)、癸(guǐ); 地支十二:子、丑、寅、卯(mǎo)、辰(chén)、巳(sì)、午、未(wèi)、申、酉(yǒu)、戌(xū)、亥。 天乾地支組合成如下六十個計時序號,作為紀年、月、日、時的名稱,叫「干支紀年法」。 編輯本段六十甲子順序 1 ~10 甲子 乙丑 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 11~20 甲戌 乙亥 丙子 丁丑 戊寅 己卯 庚辰 辛巳 壬午 癸未 21~30 甲申 乙酉 丙戌 丁亥 戊子 己丑 庚寅 辛卯 壬辰 癸巳 31~40甲午 乙未 丙申 丁酉 戊戌 己亥 庚子 辛丑 壬寅 癸卯 41~50甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 辛亥 壬子 癸丑 51 ~60甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥 用六十甲子依次紀年,六十年一個輪回。干支紀年法的新一年由立春開始,2009年的立春是二月四日,所以2009年2月4日立春之後才是己丑年,在此之前應是戊子年。公元紀年的一年以立春為界前後分屬不同的干支紀年,這一點不熟悉的人容易搞錯,應特別注意。 編輯本段與公元紀年的換算 第一種演算法: 如何將公元紀年換算成干支紀年: 不同資料演算法有所差異,有的給出公式,但本質上是一回事。這里介紹一種簡易直觀的演算法。 首先給每個天干、地支一個編號,從頭以4開始循序排下去,天干10後接1,。地支12後接1。 天干:甲4、乙5、丙6、丁7、戊8、己9、庚10、辛1、壬2、癸3 地支:子4、丑5、寅6、卯7、辰8、巳9、午10、未11、申12、酉1、戌2、亥3 以公元年的尾數在天干中找出對應該尾數的天干,再將公元紀年除以12,用除不盡的余數在地支中查出對應該余數的地支,這樣就得到了公元紀年的干支紀年。如2003年,其尾數為3,對應的天干為「癸」;以12除2003得166,余數為11,對應的地支為未。於是2003年的干支紀年為「癸未」年。注意這是指2003年立春之後,立春之前應是「壬午」年。趙達先生在「祭文」中指出的時間是「癸未清明」,清明是立春之後的第四個節氣(立春、雨水、驚蟄、春分、清明),所以趙先生說歲在癸未,而非壬午。 第二種演算法: 1. 天干演算法:用公元紀年數減3,除以10(不管商數)所得余數,就是天干所對應的位數; 2. 地支演算法:用公元紀年數減3,除以12(不管商數)所得余數,就是地支所對應的位數; 天干:甲、乙、丙、丁、戊、已、庚、辛、壬、癸 地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 例1. 我們以2010年為例; 天干演算法: 2010-3=2007, 2007/10=200餘7, 7對應天干第7位是庚,即天干為庚; 地支演算法: 2010-3=2007, 2007/12=167餘3, 3對應地支第3位是寅,即地支為寅; 綜上公元2010是用天乾地支紀年為庚寅年。為使各位信任此演算法,本人再舉一例來說明: 例2. 我們再以1987年為例; 天干演算法: 1987-3=1984, 1984/10=198餘4, 4對應天干第4位是丁,即天干為丁; 地支演算法: 1987-3=1984, 1984/12=165餘4, 4對應地支第4位是卯,即地支為卯; 綜上公元1987是用天乾地支紀年為丁卯年。 第三種演算法: 首先,將天干、地支編號如下: 天干:甲、乙、丙、丁、戊、已、庚、辛、壬、癸 4 5 6 7 8 9 10 1 2 3 地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 4 5 6 7 8 9 10 11 12 1 2 3 如要將公元紀年換算成干支紀年,以公元年的尾數在天干中找出相對應。然後,將公元紀年除以12,用余數在地支中找出所對應的地支。這樣,公元紀年就換算成了干支紀年。 如:公元1995年 用該年尾數5找出對應的天干為「乙」;然後,用1995除以12得余數為3,用余數3找出相對應的地支為「亥」。 那麼,公元1995年則為農歷乙亥年。 再如:公元1861年 用尾數1查天干為「辛」,用1861除以12得余數為1,再用余數1查找地支為「酉」。那麼,公元1861年則為農歷辛酉年。 如果某一年的尾數為0或者用該年除以12的余數為0,則取天干中的第10位「庚」和地支中的第12位「申」。 如:公元120年 尾數0則取天干中的「庚」;除以12餘數為0,則取地支中的第12位「申」。 那麼,公元120年則為庚申年。 如果公元紀年是單個數字,就用該數字在天干、地支中查找即可。如:公元6年,則在天干、地支中找出6相對應的「丙」和「寅」,那麼該年則為丙寅年。公元8年則為戊辰年。 公元11年,則取尾數1對應的天干中的「辛」和11對應的地支中的「未」。那麼,該年則為辛未年。 公元12年則為壬申年。 公元前紀年與干支紀年的換算 將天干、地支編號如下: 天干:甲、乙、丙、丁、戊、已、庚、辛、壬、癸 7 6 5 4 3 2 1 10 9 8 地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 9 8 7 6 5 4 3 2 1 12 11 10 具體換算方法同一 如:公元前155年 用尾數5取天干中的「丙」; 155除以12得余數11,對應地支中的「戌」。那麼,該年則為丙戌年。 公元前8年則為癸丑年 天乾地支紀月 干支紀月時,每個地支對應二十四節氣自某節氣(非中氣)至下一個節氣,以交節時間決定起始的一個月期間,不是農歷某月初一至月底。許多歷書註明某農歷月對應某干支,只是近似而非全等對應。若遇甲或己的年份,正月大致是丙寅;遇上乙或庚之年,正月大致為戊寅;丙或辛之年正月大致為庚寅,丁或壬之年正月大致為壬寅,戊或癸之年正月大致為甲寅。依照正月之干支,其餘月份按干支推算。60個月合5年一個周期;一個周期完了重復使用,周而復始,循環下去。東漢光武帝建武二十九年癸丑年(公元53年)冬至月(大雪至小寒的月份,近似農歷十一月)就是「甲子月」。有歌訣為證:甲己之年丙作首,乙庚之歲戊為頭;丙辛必定尋庚起,丁壬壬位順行流;更有戊癸何方覓,甲寅之上好追求。 下表是地支紀月時對應的節氣時間段、中氣、近似農歷月份、近似陽歷月份、以及年天乾和月地支構成的月干支: 月地支 節氣時間段 中氣 近似農歷月份 近似陽歷月份 甲或己年 乙或庚年 丙或辛年 丁或壬年 戊或癸年 寅月 立春—驚蟄 雨水 正月 2月 丙寅月 戊寅月 庚寅月 壬寅月 甲寅月 卯月 驚蟄—清明 春分 二月 3月 丁卯月 己卯月 辛卯月 癸卯月 乙卯月 辰月 清明—立夏 穀雨 三月 4月 戊辰月 庚辰月 壬辰月 甲辰月 丙辰月 巳月 立夏—芒種 小滿 四月 5月 己巳月 辛巳月 癸巳月 乙巳月 丁巳月 午月 芒種—小暑 夏至 五月 6月 庚午月 壬午月 甲午月 丙午月 戊午月 未月 小暑—立秋 大暑 六月 7月 辛未月 癸未月 乙未月 丁未月 己未月 申月 立秋—白露 處暑 七月 8月 壬申月 甲申月 丙申月 戊申月 庚申月 酉月 白露—寒露 秋分 八月 9月 癸酉月 乙酉月 丁酉月 己酉月 辛酉月 戌月 寒露—立冬 霜降 九月 10月 甲戌月 丙戌月 戊戌月 庚戌月 壬戌月 亥月 立冬—大雪 小雪 十月 11月 乙亥月 丁亥月 己亥月 辛亥月 癸亥月 子月 大雪—小寒 冬至 十一月 12月 丙子月 戊子月 庚子月 壬子月 甲子月 丑月 小寒—立春 大寒 十二月 1月 丁丑月 己丑月 辛丑月 癸丑月 乙丑月 干支紀月法未普遍實行,主要為星相家推算八字用。 推算實例:2004年大致是農歷甲申年。那次甲申年自2004年2月4日19時56分立春起,至2005年2月4日1時43分立春止。這里的時刻是東經120度標准時。 丙寅月,2004年2月4日19時56分立春~2004年3月5日13時56分驚蟄 丁卯月,2004年3月5日13時56分驚蟄~2004年4月4日18時43分清明 戊辰月,2004年4月4日18時43分清明~2004年5月5日12時2分立夏 己巳月,2004年5月5日12時2分立夏~2004年6月5日16時14分芒種 庚午月,2004年6月5日16時14分芒種~2004年7月7日2時31分小暑 辛未月,2004年7月7日2時31分小暑~2004年8月7日12時20分立秋 壬申月,2004年8月7日12時20分立秋~2004年9月7日15時13分白露 癸酉月,2004年9月7日15時13分白露~2004年10月8日6時49分寒露 甲戌月,2004年10月8日6時49分寒露~2004年11月7日9時59分立冬 乙亥月,2004年11月7日9時59分立冬~2004年12月7日2時49分大雪 丙子月,2004年12月7日2時49分大雪~2005年1月5日14時3分小寒 丁丑月,2005年1月5日14時3分小寒~2005年2月4日1時43分大寒 天乾地支紀日 干支紀日,60日大致合2個月一個周期;一個周期完了重復使用,周而復始,循環下去。確定的文獻指出干支紀日始於魯隱公三年夏歷二月己巳日(公元前720年二月初十)。 因為儒略歷的平年有365日,而每4年一次,公元年能被4整除,閏年有366日,平均一年365.25日,所以4年1461日和一甲子的60日,最小公倍數是29220日,合80年。這就是說,每80年,干支紀日對應的儒略歷月日日期會反復一次循環。(公元4年本來應為閏年,但因為公元前45年開始實施儒略歷後,「每隔3年」加一次閏日被誤為「每3年」加一次閏日,所以羅馬皇帝屋大維下令前5年、前1年、4年停閏以修正錯誤置閏。) 因為格里歷的平年有365日,而每4年一次閏年,但是如果遇上整百年,公元年能被400整除才能認定為閏年(這是因為按照現在立法計算,四年一閏的規定使每年多出0.0078天,經過400年大約會多出3天,如果在能被400整除年份的前面3個百年不算閏年,則正好平衡),閏年有366日,平均一年365.2425日,所以400年146097日和一甲子的60日,最小公倍數是2921940日,合8000年。這就是說,每80年,干支紀日對應的格里歷月日日期若沒有遇到能被100但非400整除的公元年,會反復一次循環,但整體而言,假設未來從不改格里歷,每8000年,干支紀日對應的格里歷月日日期才會反復一次完整的循環。1912年2月18日,合農歷壬子年正月初一,以及9912年2月18日,都是「甲子日」。 天乾地支紀時 干支紀時,60時辰合5日一個周期;一個周期完了重復使用,周而復始,循環下去。必須注意的是子時分為0時到1時的早子時和23時到24時的晚子時,所以遇到甲或己之日,0時到1時是甲子時,但23時到24時是丙子時。晚子時又稱子夜或夜子。日上起時亦有歌訣:甲己還加甲,乙庚丙作初;丙辛從戊起,丁壬庚子居;戊癸何方發,壬子是真途。下表列出日天乾和時辰地支構成的時辰干支,以北京時間(UTC+8)為准: 時辰地支 北京時間(UTC+8)甲或己日 乙或庚日 丙或辛日 丁或壬日 戊或癸日 子時 23時—1時 甲子時 丙子時 戊子時 庚子時 壬子時 丑時 1時—3時 乙丑時 丁丑時 己丑時 辛丑時 癸丑時 寅時 3時—5時 丙寅時 戊寅時 庚寅時 壬寅時 甲寅時 卯時 5時—7時 丁卯時 己卯時 辛卯時 癸卯時 乙卯時 辰時 7時—9時 戊辰時 庚辰時 壬辰時 甲辰時 丙辰時 巳時 9時—11時 己巳時 辛巳時 癸巳時 乙巳時 丁巳時 午時 11時—13時 庚午時 壬午時 甲午時 丙午時 戊午時 未時 13時—15時 辛未時 癸未時 乙未時 丁未時 己未時 申時 15時—17時 壬申時 甲申時 丙申時 戊申時 庚申時 酉時 17時—19時 癸酉時 乙酉時 丁酉時 己酉時 辛酉時 戌時 19時—21時 甲戌時 丙戌時 戊戌時 庚戌時 壬戌時 亥時 21時—23時 乙亥時 丁亥時 己亥時 辛亥時 癸亥時 天乾地支次序表 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.癸亥 天乾地支的計算方法 (年份- 3)/10餘數對天干 如1894-3=1891 ,1891除以10餘數是1即為甲 (年份- 3)/12餘數對地支 如1894-3=1891 ,1891除以12餘數是7即為午 即1894年是甲午年 編輯本段其他相關 天乾地支紀年法同時可紀年、月、日、時,分別稱為「年柱、月柱、日柱、時柱」。此八個字就是俗稱的「八字」。一個人的八字就是他出生時間的四柱記錄。關於月、日、時的天乾地支紀法,已使用不多,有興趣的讀者可去查閱有關資料。 十二地支與十二生肖對應,即子鼠、丑牛、寅虎、卯兔、辰龍、巳蛇、午馬、未羊、申猴、酉雞、戌狗、亥豬。