ローマ数字:減算記法と使い分けの実用ガイド
ローマ数字(I、V、X、L、C、D、M)は今でも時計の文字盤、章番号、映画のクレジット年表記などに残っています。仕組みと制約を整理します。
基本記号と値
| 記号 | 値 |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
7 つの記号で 1〜3999 までを表します。
加算記法と減算記法
ローマ数字の基本は 左から大きい順に並べて足す:
III = 1 + 1 + 1 = 3
LXX = 50 + 10 + 10 = 70
MMXXIV = 1000 + 1000 + 10 + 10 + 4 = 2024 ただし、4 つ同じ記号を連続させないためのルールとして 減算記法があります。小さい記号を大きい記号の前に置くと「引き算」を意味する:
IV = 5 - 1 = 4 (IIIIではない)
IX = 10 - 1 = 9 (VIIIIではない)
XL = 50 - 10 = 40
XC = 100 - 10 = 90
CD = 500 - 100 = 400
CM = 1000 - 100 = 900 減算記法が使えるのは 特定の組み合わせのみ:
IはVとXの前XはLとCの前CはDとMの前
IL(49)や IC(99)のような組み合わせは正規ではなく、XLIX や XCIX と書きます。
3999 までの限界
ローマ数字の標準的な記法は 3999(MMMCMXCIX)が上限です。理由:
Mを 4 つ連続させない- それ以上の数を表す記号がない(古典では
Mの上に線を引くなどの拡張記法あり)
3999 = MMMCMXCIX、これが書ける最大値。4000 を表すには別の方法が必要。
例:年号の書き方
| 西暦 | ローマ数字 |
|---|---|
| 2000 | MM |
| 2024 | MMXXIV |
| 1999 | MCMXCIX |
| 1492 | MCDXCII |
| 1066 | MLXVI |
映画・テレビ番組のクレジットで「© MCMXCIX」のような表記をよく見ます(1999年)。
0 と負の数の扱い
ローマ数字には 0 を表す記号がない。中世になって “N”(nullus = 何もない)が代用されたが標準ではない。
負の数も表現できない。これらは古代ローマ数学の制約でもありました。
分数の特殊記号
古代ローマには 12 進分数の特殊記号があった:
- S = 1/2
- ・ = 1/12(uncia)
- 例:
VS = 5 + 1/2 = 5.5
現代ではほぼ使われませんが、コインや古文書を読む際に出てきます。
時計文字盤の伝統:IIII vs IV
時計の文字盤では 「4」を IIII と書く慣習があります。これは:
- 視覚的バランス(IV、VIII、XII の対称性)
- 14 世紀から続く伝統
IVは神の名(IUPITER の略)に通じるため避けたという説もある
ただしビッグベンなど例外もあります。
アルゴリズム:10 進 → ローマ数字
変換アルゴリズム:
function toRoman(num) {
const map = [
[1000, 'M'],
[900, 'CM'],
[500, 'D'],
[400, 'CD'],
[100, 'C'],
[90, 'XC'],
[50, 'L'],
[40, 'XL'],
[10, 'X'],
[9, 'IX'],
[5, 'V'],
[4, 'IV'],
[1, 'I']
];
let result = '';
for (const [value, symbol] of map) {
while (num >= value) {
result += symbol;
num -= value;
}
}
return result;
} 「大きい順に値を引き続ける」貪欲アルゴリズム。減算記法(CM、CD、XC など)を予めペアとして登録するのがコツ。
ローマ数字 → 10 進
逆変換は「次の文字が大きければ引き算、そうでなければ足し算」:
function fromRoman(s) {
const map = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
let total = 0;
for (let i = 0; i < s.length; i++) {
const cur = map[s[i]];
const next = map[s[i + 1]] ?? 0;
if (cur < next) total -= cur;
else total += cur;
}
return total;
} 現代の用途
- 時計の文字盤:伝統
- 章番号・序文番号:書籍の前付け(i, ii, iii, …)に小文字版
- 映画のクレジット年:著作権表記
- 君主・教皇の番号:エリザベス II、フランシスコ I 世
- 化学:金属の酸化数(鉄(III)など)
- 競技大会:オリンピックの回数(XXXIII オリンピック = 第33回)
まとめ
- 7 つの記号(I, V, X, L, C, D, M)で 1〜3999 を表す
- 加算記法が基本、特定の組み合わせのみ減算記法を使う
- 0 や負の数は表現できない
- 時計の
IIIIは伝統的な例外 - 現代でも限定的な用途で使われ続ける
10 進数とローマ数字を相互変換したいときは、本サイトのローマ数字変換ツールが使えます。