#include <iostream> #include <cstdio> using namespace std; /* * 二维数组保存平年和闰年0~12月份对应的天数 */ int dayTable[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //平年 {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} //闰年 }; /* * 星期名称的字符串 */ char weekDayTable[8][15] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; /* * 月份名称的字符串 */ char monthTable[13][15] = {"", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; /** * 判断是否为闰年 * @param year * @return */ int isLeapYear(int year) { //return (year & 3 == 0 && year % 100 != 0) || year % 400 == 0; return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; } /** * 返回一个完整年的天数 * 闰年366天,平年365天 * @param year * @return */ int getDayNumOfYear(int year) { return isLeapYear(year) ? 366 : 365; } /** * Day of Week--上海交通大学 * 隐含0001.01.01是周一,所以我们计算输入的日期与0001.01.01之间的差值天数,然后对7取模,即可知道偏移多少天。 * @return */ int main() { int year; int month; string monthStr; int day; while (cin >> day >> monthStr >> year) { //确定月份 for (int i = 0; i <= 12; ++i) { if (monthStr == monthTable[i]) { month = i; break; } } //计算距离0001.01.01的天数,0001.01.01是周一 int dayNumber = 0; //年份要从0001开始,不可以从0000开始 for (int j = 1; j < year; ++j) { dayNumber += getDayNumOfYear(j); } for (int k = 0; k < month; ++k) { dayNumber += dayTable[isLeapYear(year)][k]; } dayNumber += day; //dayNumber%7即可 cout << weekDayTable[dayNumber % 7] << endl; } return 0; }