トラック
/
C
C
/
演習
/
ローマ数字
ローマ数字

ローマ数字

中級

はじめに

今日、世界のほとんどの人はアラビア数字(0〜9)を使っています。 しかし、2000年前にさかのぼってみると、当時のほとんどのヨーロッパ人は代わりにローマ数字を使っていたことがわかります。

ローマ数字を書くには、次のラテン文字を使います。それぞれに値があります:

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

ローマ数字はこれらの文字を並べたもので、その値は各文字の値の合計になります。 たとえば、XVIIIの値は18です(10 + 5 + 1 + 1 + 1 = 18)。

ただし、話を少しややこしくするルールが1つあります。それは、同じ文字を続けて3回より多く使うことはできないというものです。 つまり、4のような数値を、一見自然に見えるIIIIで表すことはできません。 代わりに、そうした数値には、2つの文字の間で引き算をする方法を使います。 そこで、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

アラビア数字とローマ数字を変換する方法は、たくさんあります。 まずは素朴な方法で、ローマ数字の考え方に慣れることをおすすめします。そのうえで、より効率的な方法を探してみましょう。

最後に、Deep Diveの動画もぜひチェックしてください。どんな方法があるのかを探ることができます!

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C Exercism

ローマ数字を始める準備はできましたか?

Exercismに登録すれば、84個の演習、そして本物の人間によるメンタリングとともに、Cを学んでマスターできます。すべて無料です。

ローマ数字を深く掘り下げよう!

この厄介な演習に対する、さまざまな解答を紹介します。再帰からテーブルを使った検索まで、混合基数を利用した解答や、Common Lispによる単純なずるい解き方まで幅広く取り上げます。