一种比较优雅的方案,用判断闰年返回值0/1选择每月对应的天数

#include <cstdio>

int dayTable[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

bool IsLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// 给出年月日,输出是该年的第几天,用当月的天数加上之前月份的天数
int main() {
    int year, month, day;
    while (scanf("%d%d%d", &year, &month, &day) != EOF) {
        while (month > 1) {     // 累加到1月为止,因为month是前--,等于1不能再进入循环
            int row = IsLeapYear(year);
            day += dayTable[row][--month];
        }
        printf("%d\n", day);

    }
    return 0;
}