Rubyで数字をローマ数字で表示
自分でも解いてみる。
class Integer def roman(s=self) return "-" if 3999 < s v = 1 r = {1 => 'I', 4 => 'IV', 5 => 'V', 9=> 'IX', 10 => 'X', 40 => 'XL', 50 => 'L', 90 => 'XC', 100 => 'C', 400 => 'CD', 500 => 'D', 900=> 'CM', 1000 => 'M', 9999 => "" } r.keys.sort.each{|k| if k > s && s > 0 return r[v] + roman(s - v); break end v = k } return "" end end # test [ 1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18,19,20, 95,96,97,98,99,100,200,450,500, 999,1000,1945,1999,3999,4000 ].each{|v| puts v.to_s + "\t" + v.roman }
とりあえず、答えはあってるっぽい。
・・・一文字のI V X などと同様に、事前にIV,IXといった減算タイプもハッシュに用意しちゃう方法。
どんなもんでしょ。