1

私はここで定義されているカタのローマ数字のコーディングに取り組んでいます。私はそれを終えて立ち往生していませんが、答えるのに助けが必要な質問があります。

ここに私の質問があります:

class Fixnum
  NUMERALS = [
    ['V', 5], ['IV', 4], ['I', 1]
  ]
  def to_roman
    roman = ""
    number = self
    for key, value in NUMERALS
      count, number = number.divmod(value)
      roman << (key * count)
    end
    roman
  end
end

私がdivmodを実行すると、5という数字が表示されます。

5.to_roman

それはVを返します。そしてそれは理にかなっています

5.divmod(5) => 1, 0

しかし、上記のこのコードはどのように同じことをしませんか

5.divmod(1) => 5, 0

キー(I)とカウント(5)を追加するだけなので、IIIIIではなくVをどのように返しますか。どういうわけか、IIIIIではなくVを正しく返しているのは明らかですが、そのロジックがどこにあるのかわかりません。どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

1

コードが実行されることはありません5.divmod(1)。初めてループを実行するときは、key「V」であり、value5です。その後実行され5.divmod(5)、その後、number == 0。したがって、ループの次の反復では、keyが'IV'でvalueが4の場合、が実行さ0.divmod(4)れ、結果としてcount == 0文字列に何も追加されません。

しかし、9.to_roman「VIV」を返すため、このコードは奇妙です。

于 2012-08-01T19:24:54.800 に答える