罗马数字计算器
Roman Number Calculator
我必须做一个作业,其中我必须实现罗马数字以及对它们进行计算时遵循的规则,包含在这个 link
http://www.periodni.com/roman_numerals_converter.html
我不要代码,只是帮忙。到目前为止,我已经采用了两种方法:
- 使用常量,我将罗马数字声明为常量,然后在获得输入后,我可以选择解码字符串输入,后来我放弃了。
- 使用哈希。我用数字声明了一个散列,然后在获得输入后,我使用 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
然后你 运行 这个函数在子节点上递归,直到节点是微不足道的(比如 XX
或 III
)。
最后一步是递归计算结果。
我必须做一个作业,其中我必须实现罗马数字以及对它们进行计算时遵循的规则,包含在这个 link
http://www.periodni.com/roman_numerals_converter.html
我不要代码,只是帮忙。到目前为止,我已经采用了两种方法:
- 使用常量,我将罗马数字声明为常量,然后在获得输入后,我可以选择解码字符串输入,后来我放弃了。
- 使用哈希。我用数字声明了一个散列,然后在获得输入后,我使用 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
然后你 运行 这个函数在子节点上递归,直到节点是微不足道的(比如 XX
或 III
)。
最后一步是递归计算结果。