鱼C论坛

 找回密码
 立即注册
查看: 72|回复: 3

S1E10第八题答案看不懂有人可以讲解下吗

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
8. 请用一个逻辑表达式来判断某一年是否为闰年。

某一年份如果符合下边 A 或 B 其中一个,我们称之为闰年:
A. 能被 4 整除,但不能被 100 整除;
B. 能被 400 整除。

答:(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)

解析:|| 左边为 A 条件,右边为 B 条件,符合其中一个,逻辑表达式即为真。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 6 天前 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-25 21:37 编辑
  1. (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
复制代码

        此表达式总体上是由 || 连接的 A、B 两个子表达式构成,A、B 两个条件中,只要有一个是真,那么,表达式的值就是真,否则,当然就是假了。
        条件 Ayear % 4 == 0 && year % 100 != 0,此条件是说,只要 year 可以被 4 整除,但不可以被 100 整除,那么,条件 A  的值就为真,这样的话 year = 400 的时候 条件 A 的值就是假,而我们希望它是真。所以,又添加了 year % 400 == 0 作为条件 B,专门负责在 year 可以被 400 整除的时候,对 条件 A 产生的结果进行修正。
        闰年系统每 400 年是一个周期,如果按每 4 年 1 闰,那么,400 年会有 100 闰,事实上,人类早期采用的历法(儒略历)正是这样计算闰年的,结果产生了较大的累积误差,后来,在 1582年 10 月 5 日(儒略历),直接切换到了 1582 年 10 月 15 日(格里历)。儒略历的 1582 年 10 月 5 日 和 格里历的 1582 年 10 月 15 日是同一天,这样,1582 年 10 月 6 日~14 日这 10 天在日历上根本就没有存在过,被用来消除之前的历法误差了。我们今天使用的历法正是格里历。格里历每 400 年 有 97 闰,所以,在 year % 4 == 0 每 400 年 100 闰的基础上,先扣除 4 个 整 100 的年,于是,闰年的条件表达为 year % 4 == 0 && year % 100 != 0,是的,如你所见,&& year % 100 != 0 的作用就是从 100 个闰年中,扣除 4 个整 100 的年份,这样,每 400 年就有 96 闰,还差 1 闰,再加上 400 年周期的最后一年,凑成每 400 年 97 闰,于是,表达式就变成了 (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
        所以,记住一个常识,&& 运算符使条件苛刻,是在做减法,|| 运算符使条件宽松,是在做加法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 3 天前 | 显示全部楼层
jackz007 发表于 2021-11-25 18:44
此表达式总体上是由 || 连接的 A、B 两个子表达式构成,A、B 两个条件中,只要有一个是真,那么 ...

随然不是很明白,但是谢谢啦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 3 天前 | 显示全部楼层
可以更精简一点:(!(year % 4) && year % 100) || (!(year % 400))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2021-12-1 23:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表