日期求星期(利用蔡勒公式求解)
阿新 • • 發佈:2021-02-11
技術標籤:演算法
問題:
根據給出日期求出該日期是星期幾?
輸入格式:
年 月 日
輸出格式:
一個數字
0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
輸入:
2021 2 1
輸出:
1
思路:
蔡勒公式!
符號說明:
- w:星期; w對7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
- c:世紀(注:一般情況下,在公式中取值為已經過的世紀數,也就是年份除以一百的結果,而非正在進行的世紀,也就是現在常用的年份除以一百加一;不過如果年份是公元前的年份且非整百數的話,c應該等於所在世紀的編號,如公元前253年,是公元前3世紀,c就等於-3)
- y:年(一般情況下是後兩位數,如果是公元前的年份且非整百數,y應該等於cMOD100+100)
- m:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算)
- 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;
}