javascript - 闰年解决方案检查

标签 javascript leap-year

我知道有更好、更有效的解决方案来检查哪一年是闰年。但我是一个初学者,我很好奇,尽管我的代码效率低下,但它是否仍然执行解决方案并且其逻辑没有缺陷?

这是确定特定年份是否为闰年的方法:

如果一年能被 4 整除,则为闰年;

除非该年份也能被 100 整除;

除非该年份也能被 400 整除。

我的解决方案:

function isLeap(year) {   

    if (year % 4 === 0 && year % 100 != 0) {
        return "Leap year.";
    }

    if (year % 4 === 0 && year % 100 != 0 && year % 400 === 0) {
        return "Leap year.";
    }

    if (year % 4 === 0 && year % 100 != 0 && year % 400 != 0) {
        return "Not leap year.";
    }

    else {
        return "Not leap year.";
    }
}

最佳答案

在您的代码中,您分别有 3 个 if 语句。第三个 if 语句,无论结果如何,都会记录“不是闰年”,因此 year % 400 !=0 是一个多余的检查,因为如果删除,它仍然会属于else 比较。

这意味着我们可以将所有不是闰年的内容放入 else 中并消除 if 语句,使代码如下所示。

if (year % 4 === 0 && year % 100 != 0) {
    return "Leap year.";
}

if (year % 4 === 0 && year % 100 != 0 && year % 400 === 0) {
    return "Leap year.";
}

else {
    return "Not leap year.";
}

如果我们查看其余的 if 语句,我们可以看到前 2 个比较是相同的,并且我们可以选择检查 year % 400 === 0

但是,根据您的 3 条规则,第 3 条规则规定: 除非那一年也能被 400 整除。 因此,我们可以假设,如果它能被 400 整除,那么它就是一个有保证的闰年,并且我们有语句 year % 400 === 0 确保这一点。然后我们使用 OR 运算符 ||。这意味着,如果我们得到可以被 400 整除的年份,我们总是返回闰年,而不管其他 2 条规则如何。

但是,如果它不能被 400 整除,我们就剩下 2 个比较 year % 100 != 0 &&year % 4 === 0。如果这两者都成立,并由 AND 运算符 && 强制执行,那么这也是闰年。这将为您留下以下 if 语句。

if (year % 400 === 0 || year % 100 !== 0 && year % 4 === 0) {
    return "Leap year.";
}

else {
    return "Not leap year.";
}

此时,您可以说年份要么为真,要么符合闰年的规则而进入 if 语句。这意味着我们可以删除 else 并只包含一个 if 语句和一个额外的返回值,如果使用有效的闰年调用该函数,则永远不会达到该返回值。

if (year % 400 === 0 || year % 100 !== 0 && year % 4 === 0) {
    return "Leap year.";
}

return "Not leap year.";

关于javascript - 闰年解决方案检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73712418/

相关文章:

c# - 查找一年中的最后一天

javascript - JavaScript 和 UI 响应中的长时间运行循环

c# - 回发后滚动到面板 C#

c - 如何在C中以编程方式查找leap年

javascript - JS - 考虑闰年计算两个日期之间的天数

python - 平日与闰年的比较

javascript - 适用于 android、ios 和 angularjs 的 Feed 阅读器

javascript - VueJS : Run function in parent component when event triggered in child component

Javascript Koans - 数组引用