學習軌道
/
Dart
Dart
/
練習
/
羅馬數字
羅馬數字

羅馬數字

簡單

簡介

現今世界上大多數人使用阿拉伯數字(0–9)。 但如果你回到兩千年前,你會發現大多數歐洲人使用的是羅馬數字。

要寫出一個羅馬數字,我們使用下列拉丁字母,每個字母都有對應的值:

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

羅馬數字是這些字母組成的序列,它的值就是各字母值的總和。 例如,XVIII 的值是 18(10 + 5 + 1 + 1 + 1 = 18)。

不過有一條規則讓事情變得比較複雜,那就是同一個字母不能連續使用超過三次。 這表示我們不能用看似自然的 IIII 來表示 4 這樣的數字。 遇到這些數字時,我們改用在兩個字母之間做減法的方式。 所以我們不把 4 想成 1 + 1 + 1 + 1,而是想成 5 - 1。 而且對我們現代人的思維來說有點容易搞混的是,我們會把比較小的數字寫在前面。 這只適用於以下情況:4(IV)、9(IX)、40(XL)、90(XC)、400(CD)和 900(CM)。

羅馬數字中順序很重要! 字母(以及上面的特殊組合)必須由左至右按值遞減的順序排列。

以下是一些例子:

 105 => CV
---- => --
 100 => C
+  5 =>  V
 106 => CVI
---- => --
 100 => C
+  5 =>  V
+  1 =>   I
 104 => CIV
---- => ---
 100 => C
+  4 =>  IV

還有一個更複雜的例子:

 1996 => MCMXCVI
----- => -------
 1000 => M
+ 900 =>  CM
+  90 =>    XC
+   5 =>      V
+   1 =>       I

說明

你的任務是把數字從阿拉伯數字轉換成羅馬數字。

這項練習只關注傳統羅馬數字,其中最大的數字是 MMMCMXCIX(也就是 3,999)。

Note

在阿拉伯數字和羅馬數字之間互相轉換有很多不同的方法。 我們建議先採用直觀的做法,熟悉羅馬數字的概念,然後再尋找更有效率的方法。

記得在最後看看我們的深入探索影片,探索你可以採用的各種不同做法!

Dart 擴充方法

這個練習會用 int類別上的擴充方法來實作。 詳情請見 Dart 文件。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Dart Exercism

準備好開始 羅馬數字 了嗎?

註冊 Exercism,透過 78 個練習 和真人引導來學習並精通 Dart,全部免費。

深入探索 羅馬數字!

探索這個棘手練習的各種不同解法,從遞迴到查表法,還有利用混合進位制的解法,以及 Common Lisp 一些投機取巧的簡單做法。