Определить количество дней в месяце

Я получаю год, месяц и день как входы, и я пытаюсь проверить входы эффективным способом. The год диапазон [0-99] (0,4,8.. считаются високосными годами),месяц

есть ли более эффективный способ создания таблицы для этого случая, кроме следующего?

const int testTable[4][12] = {
    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

if( testTable[ Year % 4 ][ Month - 1 ] >= Day){
    /*valid*/
}
else{
    /*error*/
}

есть еще одно правило, которое я не вижу?

1 ответов


вам нужно одно измерение для високосных лет и другое одно для не високосных лет:

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

int mthdays(int month, int year)
{
    static const int days[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}
    };
    int leap = isleap(year);

    return days[leap][month];
}

год [0-99] (0,4,8.. считаются високосными годами)

затем ваш