罗马数字计算器

Roman Number Calculator

我必须做一个作业,其中我必须实现罗马数字以及对它们进行计算时遵循的规则,包含在这个 link

http://www.periodni.com/roman_numerals_converter.html

我不要代码,只是帮忙。到目前为止,我已经采用了两种方法:

  1. 使用常量,我将罗马数字声明为常量,然后在获得输入后,我可以选择解码字符串输入,后来我放弃了。
  2. 使用哈希。我用数字声明了一个散列,然后在获得输入后,我使用 to_sym 方法将字符串转换为相应的值。在此之后,我获取了一个包含罗马数字小数的数组,我打算将它们与输入进行比较。 我被困在这部分。我不知道如何在这里进行比较。另外,我不想对输入数组进行排序,因为这样计算就会出错。

任何人都可以帮助我如何进行?不是代码,只是步骤。

这是我目前所做的:

class Conversion
  hash ={ :I => 1, :V => 5, :X => 10, :L => 50, :C => 100, :D => 500, :M => 1000}
  result = 0
  value = []
  hash_values = hash.values

  puts "enter input string"
  input = gets.chomp.upcase.split(//)

  input.each do |i|
    value <<  hash[i.to_sym]
  end

  for i in value do
    if value[i] > value[i+1]
      result = result + value[i]
    else
      result = result + (value[i+1] - value[i])
    end
  end

  puts result
end

如果你 运行 代码,你会看到当我在最后一个循环中尝试比较时,它正在使用索引进行计算。当我尝试使用两个哈希值做同样的事情时,也发生了同样的事情。我不能使用任何 gem 或外部库,因为这是要求。

我们的想法是创建一棵树,其中每个节点都有两个子节点:左边的是要减去的,右边的是要添加的。

一旦你得到一个字符串,你就会找到最有价值的 字母 并将其作为第一个节点,如下所示:

  XLIX

    L
   / \
  X   IX

然后你 运行 这个函数在子节点上递归,直到节点是微不足道的(比如 XXIII)。

最后一步是递归计算结果。