有人能帮我理解这个罗马数字挑战吗?

时间:2015-12-03 14:49:02

标签: ruby

def to_roman(num)
    values = [
        ["M",1000],
        ["CM",900],
        ["D",500],
        ["CD",400],
        ["C",100],
        ["XC",90],
        ["L",50],
        ["XL",40],
        ["X",10],
        ["IX",9],
        ["V",5],
        ["IV",4],
        ["I",1]
    ]
    roman = ""
    values.each do |set|
      letter = set[0]
      value = set[1]
      roman += letter * (num / value)
      num = num % value
    end 
    return roman
end

我完全迷失在这里,并希望得到一些帮助 “roman + = letter”计数器做什么,为什么必须乘以num / value 为什么num除以值? 模数有什么作用?

1 个答案:

答案 0 :(得分:3)

当您循环播放时,程序会检查您可以使用的最高罗马数字。当你离开时,例如345,下一个可能的最高数字是C,应该重复300/100 = 3次。那么数字就变成了#39; 45,由于模数,你重复得到40,然后是5,所以345是'翻译'致CCCXLV

相关问题