首页 > 解决方案 > 用天数推算出准确的月份

问题描述

我有一个函数可以从给定的天数中提取月份(days > 0 && days < 366):

int findMonth(int days)
{
    int i, months[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    for (i = 0; i < 12 && days > 0;i++)
        days -= months[i];
    return i;    
}

有没有更合理的推断方法?(我忽略了闰年)

标签: c++

解决方案


如果你想让它更短,我认为你不能。如果你只是想要一些不同的东西,也许更接近 C++,你可以试试这个:

int findMonth(int days) {
    int i = 0, months[] = {31,28,31,30,31,30,31,31,30,31,30,31};

    return std::count_if(std::begin(months), std::end(months), [&i, &days](int x) { return (i += x) - x <= days; });
}

或使用std::vector

int findMonth(int days) {
    int i = 0;
    std::vector<int> months = {31,28,31,30,31,30,31,31,30,31,30,31};

    return std::count_if(months.begin(), months.end(), [&i, &days](int x) { return (i += x) - x <= days; });   
}

推荐阅读