Roman numerals: history and system
Seven symbols, subtraction rules and the range 1–3999
The Roman numeral system originated in ancient Rome and consists of seven base symbols: I (1), V (5), X (10), L (50), C (100), D (500) and M (1000). These letters originally came from the Etruscan alphabet and were later adopted into the Latin alphabet. The system is additive: MMXXIV = 1000 + 1000 + 10 + 10 + 4 = 2024.
The subtraction rules allow for more compact notation. When a symbol with a smaller value comes before a symbol with a larger value, it is subtracted: IV = 5 − 1 = 4, IX = 10 − 1 = 9, XL = 50 − 10 = 40, XC = 100 − 10 = 90, CD = 500 − 100 = 400, CM = 1000 − 100 = 900. Only these six combinations are valid under the modern standard (ISO 15924). Without the subtraction rule, 4 would be IIII and 9 would be VIIII – historically attested, but not standardized today.
The maximum value in the standard system is 3999 (MMMCMXCIX). More than three identical characters in a row are not allowed (except for M: a maximum of MMM = 3000). Historically there were extensions: a bar above a symbol multiplied its value by 1,000 (V̄ = 5,000, M̄ = 1,000,000), but these notations are not standardized and are not supported by our calculator.
Today Roman numerals appear in many areas: year numbers on buildings and monuments (e.g. MCMXCIX = 1999 at the entrance of a building), film credits (MMXXIV = 2024), the dials of analog clocks (usually without the subtraction rule: IIII instead of IV is traditional on clocks), the names of monarchs and popes (Charles V, John XXIII), book sections and academic outlines. Understanding the subtraction rules is especially relevant for years and historical texts.
The validation in the calculator checks not only the characters but also the correct application of the subtraction rules. "IIII" is rejected as invalid (since converting it back gives 4 → IV), as is "VC" (V cannot come before C). This way, only canonical, standard-compliant Roman numerals are accepted. Invalid input is rejected with a clear error message.