给定日期输出星期几

来源:互联网 发布:ubuntu安装终端 编辑:程序博客网 时间:2024/05/16 01:52

根据蔡勒公式


/*1582/10/4之后时W=[C/4]-2C+y+[y/4]+[13*(M+1)/5]+d-11582/10/4之前时w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d+2w:星期; 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;}