ローマ数字:減算記法と使い分けの実用ガイド

約4分

ローマ数字(I、V、X、L、C、D、M)は今でも時計の文字盤、章番号、映画のクレジット年表記などに残っています。仕組みと制約を整理します。

基本記号と値

記号
I1
V5
X10
L50
C100
D500
M1000

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

減算記法が使えるのは 特定の組み合わせのみ

  • IVX の前
  • XLC の前
  • CDM の前

IL(49)や IC(99)のような組み合わせは正規ではなく、XLIXXCIX と書きます。

3999 までの限界

ローマ数字の標準的な記法は 3999(MMMCMXCIX)が上限です。理由:

  • M を 4 つ連続させない
  • それ以上の数を表す記号がない(古典では M の上に線を引くなどの拡張記法あり)

3999 = MMMCMXCIX、これが書ける最大値。4000 を表すには別の方法が必要。

例:年号の書き方

西暦ローマ数字
2000MM
2024MMXXIV
1999MCMXCIX
1492MCDXCII
1066MLXVI

映画・テレビ番組のクレジットで「© 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 進数とローマ数字を相互変換したいときは、本サイトのローマ数字変換ツールが使えます。