星期几问题——蔡勒公式
前言这篇博客主要是参考网上的一个帖子,然后自己推断验证,在原创和转载之间犹豫了很久,鉴于我确实做了很多推导工作,姑且就认为我是原创吧!
简介星期制度星期制度是一种古老的制度。据说因为《圣经×创世纪》中规定上帝用六天的时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期天是休息日。
求星期几的思路
#include <stdio.h>#include <stdlib.h>#include <string.h>struct date{int day;char month[12];int year;};int strToMonth(char *);void printWeek(int, int, int);int main(){struct date today;int count, m;while(scanf("%d %s %d", &today.day, today.month, &today.year) != EOF){m = strToMonth(today.month);printWeek(today.day, m, today.year);}return 0;}void printWeek(int day, int month, int year){int number, week, i;int m[12] = {31,28,31,30,31,30,31,31,30,31,30,31};if((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)){m[1] = 29;}number = (year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;for(i = 0; i < month - 1; i ++){number += m[i];}number += day;week = number % 7;switch(week){case 0:printf("Sunday\n");break;case 1:printf("Monday\n");break;case 2:printf("Tuesday\n");break;case 3:printf("Wednesday\n");break;case 4:printf("Thursday\n");break;case 5:printf("Friday\n");break;case 6:printf("Saturday\n");break;}}int strToMonth(char *month){if(strcmp(month, "January") == 0){return 1;}else if(strcmp(month, "February") == 0){return 2;}else if(strcmp(month, "March") == 0){return 3;}else if(strcmp(month, "April") == 0){return 4;}else if(strcmp(month, "May") == 0){return 5;}else if(strcmp(month, "June") == 0){return 6;}else if(strcmp(month, "July") == 0){return 7;}else if(strcmp(month, "August") == 0){return 8;}else if(strcmp(month, "September") == 0){return 9;}else if(strcmp(month, "October") == 0){return 10;}else if(strcmp(month, "November") == 0){return 11;}else if(strcmp(month, "December") == 0){return 12;}}