在 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;
}
我的家庭作业练习有问题。
我必须创建一个函数,告诉我下一个闰年何时给出 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;
}