给定日期输出星期几

根据蔡勒公式


/*
1582/10/4之后时
W=[C/4]-2C+y+[y/4]+[13*(M+1)/5]+d-1
1582/10/4之前时
w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d+2

w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪减1(年份前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,
	  比如2003年1月1日要看作2002年的13月1日来计算)
d:日
*/
#include <stdio.h>
char b[7][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
bool m[] = {false,true,false,true,false,true,false,true,true,false,true,false,true};
int main()
{
    int year,month,day;
    while(~scanf("%d%d%d",&year,&month,&day))
    {               
       if((year == 0 || month == 0 || day == 0) || (month == 2 && day>29) ||
        (!m[month] && day == 31) || 
        (!(year%4 == 0 && year%100 != 0 ||year%400 == 0)&&month == 2 && day == 29) 
        )
        {
            printf("illegal\n");
            continue;
        }
        if (month<3) 
        {
            year -= 1;
            month += 12;
        }
        int c = year/100,y = year%100;
        int w = c/4 - 2*c +y +(y/4) +(26*(month+1)/10) + day-1;
        printf("%s\n",b[(w%7+7)%7]);
    }
	return 0;
}




你可能感兴趣的:(给定日期输出星期几)