28

年がうるう年かどうかを判断する簡単な方法はありますか?

4

11 に答える 11

63

を使用しDate#leap?ます。

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

例えば

Date.leap?( 2018 ) # => false

Date.leap?( 2016 ) # => true
于 2009-10-14T14:25:36.043 に答える
10

あなたの理解のために:

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
于 2012-11-16T04:31:57.797 に答える
9

これを試して:

is_leap_year = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
于 2009-10-14T14:28:05.023 に答える
4

これが、同じ質問をする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
于 2013-11-28T00:47:15.223 に答える
2
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)
于 2013-05-20T01:54:44.727 に答える
1

4で割り切れる年はうるう年です。ただし、説明が必要な小さなエラーがまだあります。このエラーを排除するために、グレゴリオ暦では、100で均等に割り切れる年(たとえば、1900)は、400で均等に割り切れる場合にのみうるう年であると規定されています。

class Date

  def self.leap?(year)
    year % 4 == 0 && year % 100 != 0 || year % 400 == 0
  end

end
于 2019-02-22T17:44:02.213 に答える
0

これは範囲を取ります:

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

出典:ChrisPineによるプログラミングの学習

于 2015-10-04T03:57:13.973 に答える
0

可能な限り少ない量の比較を使用して、これを行うことができます。

  • 最初の/長いバージョン
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
于 2016-10-07T20:54:13.833 に答える
0

変数nは、テストに年を要し、うるう年の場合はtrueを出力し、そうでない場合はfalseを出力します。

n=gets.to_i 
n%4==0 ? n%100==0 ? n%400 ?(puts true):(puts false) :(puts true) :(puts false)
于 2018-04-01T18:18:50.537 に答える
0

すでに多くの答えがありますが、ここに短いバージョンがあります:

y%100 > 0 ? y%4 < 1 : y%400 < 1

年が1世紀でない場合は、4の倍数であるかどうかを確認し、そうでない場合は、400の倍数であるかどうかを確認します。

于 2021-08-29T13:07:47.517 に答える
0

これが私の方法です:

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
于 2022-02-03T06:52:49.483 に答える