# 089 : ローマ数字(\*)

ローマ数字の記法は一つの数について沢山ある場合が存在する (FAQを見よ). しかし, ある数については**最良の**記法が必ず存在する.

(FAQとは？[https://projecteuler.net/about=roman\_numeral](https://projecteuler.net/about=roman_numerals)か。)

例えば, 16の正しい記法を全て並べてみる.

> IIIIIIIIIIIIIIII\
> VIIIIIIIIIII\
> VVIIIIII\
> XIIIIII\
> VVVI\
> XVI

最後の例は, 最小の文字数で表せるという意味で, 最も効率が良い.

11Kのテキストファイル[roman.txt](https://projecteuler.net/project/resources/p089_roman.txt)は1000個のローマ記法で書かれた数を含んでいる. これらは, 正しい記法に従っている. 即ち, 大きい数から順に書かれていて, 引き算ペアのルールにも従っている(このルールについてはFAQを見よ) 但し, 最小の文字数で表されているとは限らない.

最小形で書いたときに, 何文字節約できるかを求めよ.

注: ファイル中の全てのローマ数字には, 5つ以上の同じ文字が連続して含まれることはない.

## FAQ: ローマ数字のルール [†](http://web.archive.org/web/20161031111752/http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2089#n7499c3e) <a href="#content_1_1" id="content_1_1"></a>

(訳者:概略のみ与える)(えっ)

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

**基本法則1**

全ての文字はサイズの降順に並ぶ

**基本法則2**

引き算ペアについて.

X (10) + IX (9) として19=XIXと表せる. ただし, 8をIIXと二文字以上を引くことは許されない.

1. I, X, Cのみが引き算ペアの最初の文字として許される.
2. IはVまたはXの前に来ることが許される
3. XはLまたはCの前に来ることが許される
4. CはDまたはMの前に来ることが許される
