計算某一天是星期幾的演算法- IT閱讀 - ITREAD01.COM

文章推薦指數: 80 %
投票人數:10人

計算某一天是星期幾的演算法 ... 引用了Tomohiko Sakamoto 提供的簡潔程式碼} int main() { int y,m,d; string mon; char weekday[7][10]={"Sunday" ... 計算某一天是星期幾的演算法 首頁 最新 HTML CSS JavaScript jQuery Python3 Python2 Java C C++ Go SQL 首頁 最新 Search 計算某一天是星期幾的演算法 2019-01-02254 如何計算某一天是星期幾? ——蔡勒(Zeller)公式  歷史上的某一天是星期幾?未來的某一天是星期幾?關於這個問題,有很多計算公式(兩個通用計算公式和一些分段計算公式),其中最著名的是蔡勒(Zeller)公式。

即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 公式中的符號含義如下,w:星期;c:世紀-1;y:年(兩位數);m:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算);d:日;[]代表取整,即只要整數部分。

(C是世紀數減一,y是年份後兩位,M是月份,d是日數。

1月和2月要按上一年的13月和14月來算,這時C和y均按上一年取值。

) 算出來的W除以7,餘數是幾就是星期幾。

如果餘數是0,則為星期日。

以2049年10月1日(100週年國慶)為例,用蔡勒(Zeller)公式進行計算,過程如下:  蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1  =49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1  =49+[12.25]+5-40+[28.6]  =49+12+5-40+28  =54(除以7餘5)  即2049年10月1日(100週年國慶)是星期5。

這個是最簡單的演算法 蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1  不過,以上公式只適合於1582年10月15日之後的情形(當時的羅馬教皇將愷撒大帝制訂的儒略曆修改成格里曆,即今天使用的公曆)。

http://codeup.cn/problem.php?cid=100000578&pid=1. http://ac.jobdu.com/problem.php?pid=1043 題目1043:DayofWeek 時間限制:1秒 記憶體限制:32兆 特殊判題:否 提交:5834 解決:2090 題目描述: WenowusetheGregorianstyleofdatinginRussia.Theleapyearsareyearswithnumberdivisibleby4butnotdivisibleby100,ordivisibleby400. Forexample,years2004,2180and2400areleap.Years2004,2181and2300arenotleap. Yourtaskistowriteaprogramwhichwillcomputethedayofweekcorrespondingtoagivendateinthenearestpastorinthefutureusingtoday’sagreementaboutdating. 輸入: Thereisonesinglelinecontainsthedaynumberd,monthnameMandyearnumbery(1000≤y≤3000).ThemonthnameisthecorrespondingEnglishnamestartingfromthecapitalletter. 輸出: OutputasinglelinewiththeEnglishnameofthedayofweekcorrespondingtothedate,startingfromthecapitalletter.Allotherlettersmustbeinlowercase. 樣例輸入: 9October2001 14October2001 樣例輸出: Tuesday Sunday 提示: MonthandWeeknameinInput/Output: January,February,March,April,May,June,July,August,September,October,November,December Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday 答疑:#include #include #include #include #include #include usingnamespacestd; mapmonth; intdayofweek(inty,intm,intd)/*0=Sunday*/ { staticintt[]={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;//引用了TomohikoSakamoto提供的簡潔程式碼 } intmain() { inty,m,d; stringmon; charweekday[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; month["January"]=1;month["February"]=2;month["March"]=3;month["April"]=4; month["May"]=5;month["June"]=6;month["July"]=7;month["August"]=8; month["September"]=9;month["October"]=10;month["November"]=11;month["December"]=12; while(cin>>d>>mon>>y) { m=month[mon]; intweek=dayofweek(y,m,d); cout<



請為這篇文章評分?