【问题标题】:Represent a leap year using boolean expressions [duplicate]使用布尔表达式表示闰年 [重复]
【发布时间】:2014-07-23 21:44:51
【问题描述】:

考试题:

为以下内容编写一个布尔表达式: A是闰年。

任何帮助将不胜感激!

【问题讨论】:

标签: java


【解决方案1】:

如果一年能被 4 整除且不能被 100 整除,则它是闰年,但如果能被 400 整除,则它始终是闰年。您可以将其翻译成代码字面意思:

int year = 2004;
boolean leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);

模运算符 (%) 为您提供除数时的余数,因此如果第一个数可被第二个数整除,则它等于 0

正如 Bathsheba 指出的那样,这仅适用于公历(我们的现代系统自 1582 年以来在某些国家/地区甚至在其他国家/地区更晚),如果您想处理此日期之前的几年,则代码会复杂得多,而且这需要对当时的确切规则进行一些研究。但是,在考试中,您不必担心这些。

【讨论】:

  • 如果你指出这只是公历的情况,那就更棒了。在儒略历中,闰年错误地是每 3 年一次。哎呀。
  • 请注意,不墨守成规的英格兰直到 1782 年才采用教皇格雷戈里的日历。
  • @Bathsheba:将其添加到我的答案中。由于 OP 提到了考试,我认为问题只是关于公历,而且之前的规则更复杂。
  • 只要有人开始谈论日期和日历,我就会马上上马 :-)
【解决方案2】:

http://en.wikipedia.org/wiki/Leap_year

来自文章伪代码:

if year is not divisible by 4 then common year
else if year is not divisible by 100 then leap year
else if year is not divisible by 400 then common year
else leap year

【讨论】:

    【解决方案3】:
     if((A%4==0) && A%100!=0)||A%400==0)
    

    【讨论】:

      【解决方案4】:

      您可以使用此布尔函数来确定闰年:

      public static boolean IsLeapYear(int year)
            {
               if ((year % 4) == 0)
               {
                  if ((year % 100) == 0)
                  {
                     if ((year % 400) == 0)
                        return true;
                     else
                        return false;
                  }
                  else
                     return true;
               }
               return false;
            }
      

      这遵循两个规则来确定闰年

      第一条规则:能被 4 整除的年份是闰年。 第二条规则:如果年份能被 100 整除,则不是闰年。但如果年份能被 400 整除,则为闰年。

      【讨论】:

      • 但是试题需要一个表达式,而不是函数。
      • 那么我的答案肯定不会得分。作为表达式boolean isLeapYear = ((year % 4 == 0) && year % 100 != 0) || year % 400 == 0);
      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 2012-07-13
      • 2017-04-26
      • 2012-01-28
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      相关资源
      最近更新 更多