在C中找到下一个闰年

时间:2017-10-14 15:25:25

标签: c leap-year

我在做作业时遇到了麻烦。 我必须创建一个函数,告诉我下一个闰年何时被赋予n(如果它是闰年,则为n

我已经解决了最后一部分,但是我在下一个闰年时遇到了问题"部分。我想我必须做一个循环?

这是我到目前为止所拥有的

int next_leapyear(int n) 
{

    if(((n%4==0)&&(n%100!=0))||(n%400==0)) return n;

    else
    while(?){
      n++;
     }

     return n;
}

我刚刚开始学习这门语言,所以如果你们能保持简单,我会很感激

3 个答案:

答案 0 :(得分:3)

该任务可分为两部分。首先,可以检查给定的n是否是闰年,可以使用以下函数完成。

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

接下来,可以使用基于上述函数的循环来增加n直到它是闰年。这可以通过以下方式完成。

int GetNextLeapYear(int n)
{
    int CurrentYear = n;
    while(!IsLeapYear(CurrentYear))
    {
        CurrentYear++;
    }
    return CurrentYear;
}

答案 1 :(得分:0)

增加n,直到您的if语句条件不成立为止,因此有两种方法可以将条件置于括号中,这是直接的。

第二个是,无限循环运行并在循环中放入破坏条件

while(1){
      n++;
if(((n%4==0)&&(n%100!=0))||(n%400==0)) break;

     }

答案 2 :(得分:0)

你想要增加一年直到闰年将会有效,但效率并不高,因为你必须做很多模数,这是一个非常昂贵的操作

事实上,为了找到下一个正常的闰年,您只需将年份推至next multiple of 4 ,这可以通过其中任何一个来实现

year = (year + 3) & ~0x03;
year = (year | 0x03) + 1;

如果后面的圆形它是100的倍数,那么只需添加4即可获得正确的年份。所以实现可能就像这样

int next_leapyear(int n)
{
    n = (n + 3) & ~3;
    if (n % 100 == 0) n += 4;
    return n;
}