1. 程式人生 > 其它 >日期求星期(利用蔡勒公式求解)

日期求星期(利用蔡勒公式求解)

技術標籤:演算法

問題:
根據給出日期求出該日期是星期幾?

輸入格式:
年 月 日

輸出格式:
一個數字
0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六

輸入:
2021 2 1

輸出:
1

思路:
蔡勒公式!
在這裡插入圖片描述
符號說明:

  1. w:星期; w對7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
  2. c:世紀(注:一般情況下,在公式中取值為已經過的世紀數,也就是年份除以一百的結果,而非正在進行的世紀,也就是現在常用的年份除以一百加一;不過如果年份是公元前的年份且非整百數的話,c應該等於所在世紀的編號,如公元前253年,是公元前3世紀,c就等於-3)
  3. y:年(一般情況下是後兩位數,如果是公元前的年份且非整百數,y應該等於cMOD100+100)
  4. m:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算)
  5. d:日

程式碼:

#include<stdio.h>
using namespace std;
int y,c,m,d,w,f;
int main()
{
	while(~scanf("%d%d%d",&y,&m,&d))
   {
	   f=1;
	   if((y==1582&&m==
10&&d<=4)||(y==1582&&m<=10)||(y<=1582)) f=0; if(m==1||m==2) m+=12,y=y-1; if(f) w=(d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;//1582年10月4日後 else w=(d+1+2*m+3*(m+1)/5+y+y/4+5)%7;//1582年10月4日前 printf("%d\n",(w%7+7)%7);//0-星期天,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 } return
0; }