在 C 中查找下一个闰年

Find the next leap year in C

我的家庭作业练习有问题。 我必须创建一个函数,告诉我下一个闰年何时给出 n(如果是闰年,则为 n)。

我已经解决了最后一部分,但我在 "next leap year" 部分遇到了问题。我假设我必须做一个循环?

这是我目前所拥有的

int next_leapyear(int n) 
{

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

    else
    while(?){
      n++;
     }

     return n;
}

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

增加 n 直到您的 if 语句条件不为真,因此有两种方法可以将条件放入 while 大括号中,这很简单。

第二个是,运行循环无限次并将中断条件放在循环中

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

     }

任务可以分为两部分。首先,可以检查给定的 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;
}

你增加年份直到闰年的想法 会奏效 但它不是很有效,因为你必须做很多模数 非常昂贵 操作。

事实上,要找到下一个正常的闰年,您只需要 将年份舍入到 next multiple of 4,这可以通过以下任一方式实现[=13] =]

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;
}