【发布时间】:2010-12-06 16:46:52
【问题描述】:
有没有一种简单的方法可以确定一年是否是闰年?
【问题讨论】:
有没有一种简单的方法可以确定一年是否是闰年?
【问题讨论】:
Date#leap?。now = DateTime.now
flag = Date.leap?( now.year )
例如
Date.leap?( 2018 ) # => false
Date.leap?( 2016 ) # => true
【讨论】:
flag?与闰年有关吗?
为了您的理解:
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)
【讨论】:
任何能被 4 整除的年份都是闰年。但是,仍然有一个小错误需要考虑。为了消除这个错误,公历规定能被 100 整除的年份(例如 1900 年)只有能被 400 整除的年份才是闰年。
class Date
def self.leap?(year)
year % 4 == 0 && year % 100 != 0 || year % 400 == 0
end
end
【讨论】:
这个取一个范围:
(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)
【讨论】:
已经有很多答案了,虽然这里有一个较短的版本:
y%100 > 0 ? y%4 < 1 : y%400 < 1
如果年份不是世纪,则检查是否为 4 的倍数,否则检查是否为 400 的倍数。
【讨论】:
这是我的方法:
def leap_year?(year)
Time.new(year, 12, 31).yday == 366
end
leap_year?(1999)
#=> false
leap_year?(2000)
#=> true
leap_year?(2100)
#=> false
leap_year?(2104)
#=> true
【讨论】: