2011-06-29 28 views
0

可能重複:
How to convert integer value to Roman numeral string?較年初爲羅馬數字

早在我的大學時代,學習C當所有我曾經碰到過在其相應較上年的問題羅馬數字形式。該文本中沒有解決方案,因爲它是需要思考的一些額外問題。我所能想到的是使用模算子和一堆ifs。我想知道如果有人能給我一個適當的解決方案。對所使用的邏輯的簡單算法或解釋將被讚賞。

+3

必須是重複的 –

+0

我不希望在上述鏈接中指定的代碼,我想要一個簡單的邏輯解釋。 – midhunhk

+1

邏輯從代碼中很明顯。那裏只有幾行到幾行代碼。另外在答案和評論中解釋。隨意詢問是否有任何具體的問題你不明白。 –

回答

4

這裏是數字少於4,000的邏輯。 (請參閱下面的內容,瞭解上面的操作。)在每個級別都有一個基本的4步算法。

  1. 確定數量上的千位數:floor(number/1000)。輸出許多「M」並從數字中減去數千。此時,該數字少於1,000。

  2. 如果數字爲> = 900,則輸出 「CM」 和減去900

  3. 如果數字爲> = 500,則輸出 「d」 和減去500

  4. 如果數是> = 400,則輸出「CD」和減去400

此時,數目是保證是< 400我們遵循類似的模式的數量減少到小於40:

  1. 確定數字中的數字,輸出許多「C」並從數字中減去數百。在這一點上,所述數量小於100

  2. 如果數字爲> = 90,則輸出「XC」和減去900

  3. 如果數字爲> = 50,輸出「L」和減去50.

  4. 如果數字爲> = 40,輸出「XL」和減去40.

此時,數目是保證是< 40.我們重複完全相同的邏輯使用「X」,「IX」,「V」和「IV」。我們使用數字(保證爲< 4)作爲輸出的「I」數量。

對於更大的數字,邏輯仍然是相同的,我們只是使用標準符號與頂部的酒吧。每個欄代表沒有欄的值的1000倍。 (所以V與酒吧是5000等)

+0

似乎使用遞歸會更容易在這裏實現,對吧? – midhunhk

+1

是的,這裏有一些無意識的重複性,讓人聯想到遞歸:)。對於遞歸而言,可能與遞歸邏輯相同,至少對於羅馬數字設計要處理的範圍內的數字來說,可能與遞歸相同。 –