0

我想将罗马数字(例如“mcmxcix”)转换为阿拉伯整数(例如“1999”)。

我的代码如下所示:

#~ I = 1 V = 5 X = 10 L = 50
#~ C = 100 D = 500 M = 1000


def roman_to_integer roman
  len = roman.length
  x = 1
  while x <= len
    arr = Array.new
    arr.push roman[x]
    x += 1
  end
  num = 0
  arr.each do |i|
    if i == 'I'
      num +=  1
    elsif i == 'V'
      num +=  5
    elsif i == 'X'
      num +=  10
    elsif i == 'L'
      num +=  50
    elsif i == 'C'
      num +=  100
    elsif i == 'D'
      num += 500
    elsif i == 'M'
      num +=  1000
    end
  end

  num
end    

puts(roman_to_integer('MCMXCIX'))

输出为0,但我不明白为什么?

4

3 回答 3

2

Ruby 没有后增量运算符。当它看到++它时,它会将其解释为一个中缀+后跟一个前缀 (unary) +。由于它希望在此之后跟随一个操作数,但找到了关键字end,因此您会收到语法错误。

您需要替换x++x += 1.

此外请注意,x它实际上不在roman_to_integer方法内部的范围内(这不是语法错误,但仍然是错误的)。

此外,您必须将if除第一个之外的所有 s替换为elsifs。您编写它的方式所有ifs 都是嵌套的,这意味着 a)您没有足够end的 s 和 b)代码没有您想要的语义。

于 2011-01-12T16:34:26.207 回答
1

The arr keeps getting annihilated in your while loop, and it is not in the scope outside of the loop. Move the following line above the while statement:

arr = Array.new
于 2011-01-12T19:12:39.623 回答
1

你缺少一个右括号,所以

puts(roman_to_integer('mcmxcix')

应该

puts roman_to_integer('mcmxcix')

或者

puts(roman_to_integer('mcmxcix'))
于 2011-01-12T16:36:12.653 回答