posts - 13,comments - 0,trackbacks - 0

          計算某天星期幾,最出名的算法就是蔡勒公式:

           

          —— 蔡勒(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。
           

          想知道更詳細的到網上查下.

           

          實現的算法函數:

          /************************************************************************
          * 返回值 0~6(星期日~星期六)                                                                   
          ************************************************************************/
          int GetWeek(int nYear, int nMouth, int nDay)
          {
          	int week;
          	int c = nYear/100;
          	if(nMouth<3)
          	{
          		nYear -= 1;
          		nMouth += 12;
          	}
          
          	week = ((nYear%100)+((nYear%100)/4)+(c/4)-2*c+(26*(nMouth+1)/10)+nDay-1)%7;
                  if(week<0) week += 7; return week; }
          注意:如果結果為負數的時候要加個7。   
          posted on 2011-07-29 17:09 CrackRen 閱讀(185) 評論(0)  編輯  收藏 所屬分類: 實用算法

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 岑巩县| 汨罗市| 宝清县| 元谋县| 邻水| 龙南县| 武威市| 长垣县| 赣榆县| 常熟市| 尉氏县| 甘德县| 科技| 翁牛特旗| 黑水县| 垫江县| 深水埗区| 宁津县| 伊川县| 凤台县| 伊春市| 延边| 玉门市| 商丘市| 尚义县| 辽宁省| 沙湾县| 五指山市| 梅河口市| 沙雅县| 浦城县| 吴堡县| 长垣县| 洛扎县| 天镇县| 修武县| 益阳市| 玛沁县| 塘沽区| 伊金霍洛旗| 东兴市|