2012-08-01 90 views
1

我正在編碼卡塔羅馬數字定義here。雖然我已經完成並沒有卡住,但確實有一個問題,我需要幫助解答。Ruby - divmod返回正確的值,但我不明白爲什麼

這裏是我的問題坐鎮:

class Fixnum 
    NUMERALS = [ 
    ['V', 5], ['IV', 4], ['I', 1] 
    ] 
    def to_roman 
    roman = "" 
    number = self 
    for key, value in NUMERALS 
     count, number = number.divmod(value) 
     roman << (key * count) 
    end 
    roman 
    end 
end 

當我在說執行divmod 5號,像這樣

5.to_roman 

它返回五,這是有道理的,因爲

5.divmod(5) => 1, 0 

但是這段代碼如何不與

5.divmod(1) => 5, 0 

那麼它是如何返回V而不是IIIII,因爲它只是追加鍵(I)次count(5)。不知何故,它顯然正確地返回V而不是IIIII,但我不知道該邏輯在哪裏。任何幫助將不勝感激。謝謝

回答

1

您的代碼永遠不會執行5.divmod(1)。第一次執行循環時,key爲'V',value爲5.然後執行5.divmod(5),然後執行number == 0。因此,在循環的下一次迭代中,當key爲'IV'且value爲4時,它執行0.divmod(4),導致count == 0並且沒有任何內容被添加到字符串中。

但是這段代碼很奇怪,因爲9.to_roman返回'VIV'。

+0

啊是的,它永遠不會重置號碼。出於某種原因,我沒有考慮到這一點,我應該想到這一點。是的這個代碼是不完整的任何手段。這是一個演示測試驅動開發與紅色綠色循環的卡塔,只是做基本的事情來讓測試通過。所以這個只做1-8。 – ruevaughn 2012-08-01 19:28:07

相關問題