描述
我们现在在俄罗斯使用格里高利式的约会方式。闰年是数字能被4整除但不能被100整除或不能被400整除的年份。例如,2004年、2180年和2400年为闰年。2005年、2181年和2300年不是闰年。你的任务是写一个程序,它将计算给定的日期是周几。
输入描述:
有一行包含日期d、月份M和年份y(1000≤y≤3000)。月份名称为对应的英文名称,以大写字母开头。
输出描述:
输出与日期对应的星期的英文名称的单行,从大写字母开始。其他字母必须小写。输入/输出中的月和周名称:1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月星期日、星期一、星期二、星期三、星期四、星期五、星期六
示例1
输入:
9 October 2001
14 October 2001
输出:
Tuesday
Sunday
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
int monthday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
string monthName[13] = { "","January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December" };
string weekName[8] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
bool isLeapYear(int year) {
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) return true;
else return false;
}
int date2number(int year, int month, int day) {
int number = 0;
for (int i = 1; i < year; ++i) {
if (isLeapYear(i))
number += 366;
else
number += 365;
}
if (isLeapYear(year))
monthday[2] = 29;
for (int i = 1; i < month; ++i) {
number += monthday[i];
}
number += day;
return number;
}
int main() {
int year, month, day;
string monthInput;
while (cin >> day >> monthInput >> year)
{
for (int i = 1; i <= 12; ++i) {
if (monthInput == monthName[i]) {
month = i;
break;
}
}
int number = date2number(year, month, day);
cout << weekName[number % 7] << endl;
}
return 0;
}