以下是 C++ 代码实现:

#include <iostream>
using namespace std;

void getWeekday(int yy, int mm, int dd) {
    // 判断输入是否合法
    if (mm < 1 || mm > 12 || dd < 1 || dd > 31) {
        cout << 'Invalid input!' << endl;
        return;
    }

    // 计算距离2000年1月1日的天数
    int days = 0;
    for (int i = 2000; i < yy; i++) {
        if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
            days += 366;
        } else {
            days += 365;
        }
    }
    for (int i = 1; i < mm; i++) {
        switch (i) {
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                days += 31;
                break;
            case 4: case 6: case 9: case 11:
                days += 30;
                break;
            case 2:
                if ((yy % 4 == 0 && yy % 100 != 0) || yy % 400 == 0) {
                    days += 29;
                } else {
                    days += 28;
                }
                break;
        }
    }
    days += dd - 1;

    // 计算星期几
    string weekdays[] = {'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'};
    int weekday = (days + 6) % 7;

    // 输出结果
    cout << weekdays[weekday] << endl;
}

int main() {
    getWeekday(2022, 1, 1); // 输出Saturday
    getWeekday(2000, 1, 1); // 输出Saturday
    getWeekday(2022, 2, 29); // Invalid input!
    return 0;
}

思路解析:

  1. 首先判断输入的月份和日期是否合法,如果不合法直接输出错误信息并返回;
  2. 计算输入的日期距离2000年1月1日的天数,需要考虑闰年的情况;
  3. 根据总天数计算星期几,可以用取模运算,注意要加上一个偏移量6,因为2000年1月1日是星期六;
  4. 最后根据星期几输出对应的字符串即可。

原文地址: https://www.cveoy.top/t/topic/oJNs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录