SWUSTOJ 78: 计算生日是星期几

发布时间:2024年01月09日

题目描述
编写一个程序,只要输入年月日,就能回答那天是星期几。

能被4整除但不能被100整除的,或者能被400整除的是闰年。

1、已知公元1年1月1日是星期一
2、算法:如果输入的是2006年7月10日,计算方法是
(1)先计算从公元1年1月1日到2005年末(2005-12-31)共多少天,注意其中有闰年
(2)然后再计算2006年1月1日到2006年7月10有多少天。
注意同样判断本年度是否闰年,即二月份是28天还是29天。
(3)上述两部分相加计算得到的天数,用该天数与7求余,余数即为星期几。
输入
输入一个日期,包括年、月、日。(一组测试数据)

输出
输出这个日期是星期几。

样例输入

1 1 1
2 1 1
2006 7 10

样例输出

Monday
Tuesday
Monday

#include <iostream>

using namespace std;

int main()
{
    int year, month, day;
    cin >> year >> month >> day;

    int days = 0;
    for (int i = 1; i < year; i++)
    {
        if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
            days += 366;
        else
            days += 365;
    }

    int monthdays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        monthdays[2] = 29;//闰年2月天数特殊处理

    for (int i = 1; i < month; i++)
    {
        days += monthdays[i];
    }
    days += day;

    int week = days % 7;//0为周日,1为周一,2为周二,以此类推
    switch (week)
    {
    case 0:
        cout << "Sunday" << endl;
        break;
    case 1:
        cout << "Monday" << endl;
        break;
    case 2:
        cout << "Tuesday" << endl;
        break;
    case 3:
        cout << "Wednesday" << endl;
        break;
    case 4:
        cout << "Thursday" << endl;
        break;
    case 5:
        cout << "Friday" << endl;
        break;
    case 6:
        cout << "Saturday" << endl;
        break;
    }
    return 0;
}

文章来源:https://blog.csdn.net/qq_52327660/article/details/135427974
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。