我必须做出一项任务,其中我必须实施罗马数字以及对其进行计算时遵循的规则,包含在此链接中
http://www.periodni.com/roman_numerals_converter.html
我不想要代码,只是帮助。到目前为止,我已经采用了两种方法:
任何人都可以帮我解决这个问题吗?不是代码,只是步骤。
这是我到目前为止所做的:
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或外部库,因为这是必需的。
答案 0 :(得分:1)
我们的想法是创建一个树,每个节点都有两个子节点:左边是减去的,右边是要添加的内容。
获得字符串后,您会找到最有价值的字母并将其设为第一个节点:
XLIX
L
/ \
X IX
然后在子节点上递归运行此函数,直到节点变得微不足道(如XX
或III
)。
最后一步是递归计算结果。