javascript - 闰年功能;这个解决方案是如何工作的?
问题描述
问题是这样的:
给定一年,报告它是否是闰年。
这里的棘手之处在于公历中会出现闰年:
on every year that is evenly divisible by 4
except every year that is evenly divisible by 100
unless the year is also evenly divisible by 400
我的解决方案(有效)是这样的:
export const isLeap = (year) => {
const yearModFour = (year % 4) === 0
const yearModHundred = (year % 100) === 0
const yearModFourHundred = (year % 400) === 0
const isLeapYear = yearModFour === yearModHundred === yearModFourHundred
return isLeapYear
}
我得出这个结论是因为我错过了以下逻辑:
on every year that is evenly divisible by 4
and also evenly divisible by 100
and also evenly divisible by 400
我的问题是,为什么这会起作用?
我不知道为什么我不使用 && 操作数,但话又说回来,它不会那样工作
解决方案
让我们看一下谓词yearModFour === yearModHundred === yearModFourHundred
,并列出一些会导致所有可能性的数字。
对于第 1 年,谓词计算为:
(False === False) === False
True === False
False
对于第 4 年,谓词评估为:
(True === False) === False
False === False
True
对于第 100 年,谓词评估为:
(True === True) === False
True === False
False
对于 400 年,谓词计算为:
(True === True) === True
True === True
True
现在这就是所有可能性,这里不会有任何其他可能性。这是因为任何能被 400 整除的数都可以被 100、4 和 1 整除;任何可被 100 整除的都可以被 4 和 1 整除;等等。
所以你的结论并不完全正确,因为它暗示了所有模运算之间的逻辑“与”。
推荐阅读
- javascript - Mongoose/Mongodb 通过与另一个数组比较查找嵌套数组
- anylogic - 在 Anylogic 中灵活更改模拟持续时间
- reactjs - React Scroll - 在 NavBar 中使用 React Scroll to 滚动到特定组件
- azure - Azure B2C - 2 个应用程序,不同的协议
- python - 按 get_metrics_statistic boto3 python 的时间戳排序
- php - Opencart:在 .TPL 中添加模块/html
- c# - 没有模型和editcontext的Editform?
- php - 如何使用php从特定表中回显数据
- android - 进行多个协程 API 调用并等待所有调用
- tensorflow - 从 GCP Dataflow(ml 元数据)连接到 Google Cloud SQL 实例?