ruby 如何将Roman转换为Ruby中的任何数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 如何将Roman转换为Ruby中的任何数字相关的知识,希望对你有一定的参考价值。

# Define method
def romanize(num)
    # define values with hash
    digits = {
        1000 => "M",
        900  => "CM", 500 => "D", 400 => "CD", 100 => "C",
        90   => "XC", 50  => "L", 40  => "XL", 10  => "X",
        9    => "IX", 5   => "V", 4   => "IV", 1   => "I"
    }
    
    # Check
    digits.reduce("") do |acc, digit|
        key, numeral = digit
        occurances, num = num.divmod(key)
        acc + (numeral * occurances)
    end
end


romanize 199

## Refactored version
@digits = {
  1000 => "M",
   900 => "CM", 500 => "D", 400 => "CD",  100 => "C",
    90 => "XC",  50 => "L",  40 => "XL",   10 => "X",
     9 => "IX",   5 => "V",   4 => "IV",    1 => "I"
}

def romanize(num)
  @digits.keys.each_with_object('') do |key, str|
    nbr, num = num.divmod(key)
    str << @digits[key]*nbr
  end
end

romanize(888) # => "DCCCLXXXVIII" 
#romanize(999) # => "CMXCIX"

## Another imrovement using recursion

def romanize(num, str='')
  return str if num == 0
  key = @digits.keys.find { |k| k <= num }
  str << @digits[key]
  romanize(num-key, str)
end

romanize(888) # => "DCCCLXXXVIII" 
romanize(999) # => "CMXCIX"




以上是关于ruby 如何将Roman转换为Ruby中的任何数字的主要内容,如果未能解决你的问题,请参考以下文章

如何将此时间整数转换为 Ruby 中的日期? [复制]

如何将 UTF8 组合字符转换为 ruby​​ 中的单个 UTF8 字符?

如何使用 jira-ruby gem 将转换更改为 ruby​​ 中的问题?

Ruby中的HTML页面到PDF转换器? [关闭]

如何将 JSON 转换为 Ruby 哈希

如何表示将 ruby​​ 哈希转换为 yaml 的 aws 内部函数