玩命加载中 . . .

Day Of Week


http://t.cn/E9YZLbi

描述

我们现在在俄罗斯使用格里高利式的约会方式。闰年是数字能被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;
}

文章作者: Jack Tim
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Tim !
评论
  目录