2015-05-11 105 views
1

我不得不進行分配,其中,我要實現與同時做他們的計算方法,是遵循的規則沿着羅馬數字,此鏈接中包含羅馬數字計算器

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 

如果妳運行的代碼,你會看到,雖然我儘量在最後一個循環來比較它走的是指數的計算。當我嘗試使用兩個哈希來做同樣的事情時也是如此。我不能使用任何寶石或外部庫,因爲這是要求。

+0

你能澄清你想要完成什麼,也許發佈一些你一直在使用的代碼? – Xenotoad

+0

@Xenotoad請檢查我是否發佈了驗證碼。 – Niyanta

+0

也http://codereview.stackexchange.com/questions/7937/roman-numeral-converter見 – knut

回答

1

的想法是創建一個樹,其中每個節點有兩個兒童:左邊是什麼,和。減去右邊一個是添加什麼。

一旦你得到一個字符串,你找到最看重並使其成爲第一個節點是這樣的:

XLIX 

    L 
/\ 
    X IX 

那麼你的孩子節點上遞歸運行這個功能直到節點是微不足道的(如XXIII)。

最後一步是遞歸計算結果。

+0

感謝烏爾輸入,U可以看看我添加的代碼,並建議我的一些東西。我是一名初學者,在Ruby中與樹不太合作。 – Niyanta