确定ruby闰年的简便方法?

是否有一种简单的方法来确定一年是否是闰年?

使用Date#leap?

 now = DateTime.now flag = Date.leap?( now.year ) 

例如

 Date.leap?( 2018 ) # => false Date.leap?( 2016 ) # => true 

您的理解:

 def leap_year?(year) if year % 4 == 0 if year % 100 == 0 if yearVar % 400 == 0 return true end return false end return true end false end 

这可以写成:

 def leap_year?(year) (year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0) end 

试试这个:

 is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 

以下是对于提出相同问题的exercism.io问题的答案。 明确告知您忽略可能在练习中实现它的任何标准库函数。

 class Year attr_reader :year def initialize(year) @year = year end def leap? if @year.modulo(4).zero? return true unless @year.modulo(100).zero? and not @year.modulo(400).zero? end false end end 
 def leap_year?(num) if num%4 == 0 && num%100 != 0 true elsif num%400 == 0 true elsif num%4 == 0 && num%100 == 0 && num%400 != 0 false elsif num%4 != 0 false end end puts leap_year?(2000) 

这个需要一个范围:

 (starting..ending).each do |year| next if year % 4 != 0 next if year % 100 == 0 && year % 400 != 0 puts year end 

资料来源:Chris Pine学习编程

使用尽可能少的比较,您可以这样做:

  • 第一个/更长的版本
 def leap_year?(year) # check first if year is divisible by 400 return true if year % 400 == 0 year % 4 == 0 && year % 100 != 0 end 
  • 更短的版本

我们可以使用短路OR( || )进行相同的检查:

 def leap_year?(year) year % 400 == 0 || (year % 4 == 0 && year % 100 != 0) end 

变量n需要一年进行测试,如果是闰年则打印为true,如果不是则为false

 n=gets.to_i n%4==0 ? n%100==0 ? n%400 ?(puts true):(puts false) :(puts true) :(puts false)