top1编程
← 返回题目
题解

获取月份对应的天数

1 条题解

  • 0
    @ 2026-8-4 10:11:45

    解题思路

    题目要求用 switch 语句。按月份分:大月(1、3、5、7、8、10、12)31 天,小月(4、6、9、11)30 天,2 月要看是否闰年(闰年 29 天、平年 28 天)。

    月份不在 1~12 范围时,输出 error 和 0。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int y, m;
        cin >> y >> m;
        if (m < 1 || m > 12) {          // 月份无效
            cout << "error" << endl;
            cout << 0 << endl;
            return 0;
        }
        int d;
        switch (m) {
            case 1: case 3: case 5: case 7:
            case 8: case 10: case 12:
                d = 31; break;          // 大月31天
            case 4: case 6: case 9: case 11:
                d = 30; break;          // 小月30天
            case 2:                     // 2月看是否闰年
                if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) d = 29;
                else d = 28;
                break;
        }
        cout << d << endl;
        return 0;
    }
    

    复杂度分析

    switch 只匹配一次,时间复杂度 O(1),额外空间复杂度 O(1)。

    • 1