# Case Study: Roman Numerals

## We'll cover the following

You’ve most likely seen Roman numerals, even if you didn’t recognize them. You may have seen them in copyrights of old movies and television shows (“Copyright `MCMXLVI`

” instead of “Copyright `1946`

”), or on the dedication walls of libraries or universities (“established `MDCCCLXXXVIII`

” instead of “established `1888`

”). You may also have seen them in outlines and bibliographical references. It’s a system of representing numbers that really does date back to the ancient Roman empire (hence the name).

In Roman numerals, there are seven characters that are repeated and combined in various ways to represent numbers.

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

The following are some general rules for constructing Roman numerals:

- Sometimes characters are additive.
`I`

is`1`

,`II`

is`2`

, and`III`

is`3`

.`VI`

is`6`

(literally, “`5`

and`1`

”),`VII`

is`7`

, and`VIII`

is`8`

. - The tens characters (
`I`

,`X`

,`C`

, and`M`

) can be repeated up to three times. At`4`

, you need to subtract from the next highest fives character. You can’t represent`4`

as`IIII`

; instead, it is represented as`IV`

(“1 less than 5”).`40`

is written as`XL`

(“`10`

less than`50`

”),`41`

as`XLI`

,`42`

as`XLII`

,`43`

as`XLIII`

, and then`44`

as`XLIV`

(“`10`

less than`50`

, then`1`

less than`5`

”). - Sometimes characters are… the opposite of additive. By putting certain characters before others, you subtract from the final value. For example, at
`9`

, you need to subtract from the next highest tens character:`8`

is`VIII`

, but`9`

is`IX`

(“`1`

less than`10`

”), not`VIIII`

(since the`I`

character can not be repeated four times).`90`

is`XC`

,`900`

is`CM`

. - The fives characters can not be repeated.
`10`

is always represented as`X`

, never as`VV`

.`100`

is always`C`

, never`LL`

. - Roman numerals are read left to right, so the order of characters matters very much.
`DC`

is`600`

;`CD`

is a completely different number (`400`

, “`100`

less than`500`

”).`CI`

is`101`

;`IC`

is not even a valid Roman numeral (because you can’t subtract`1`

directly from`100`

; you would need to write it as`XCIX`

, “`10`

less than`100`

, then`1`

less than`10`

”).

## Checking for thousands

What would it take to validate that an arbitrary string is a valid Roman numeral? Let’s take it one digit at a time. Since Roman numerals are always written highest to lowest, let’s start with the highest: the thousands place. For numbers 1000 and higher, the thousands are represented by a series of M characters.

Get hands-on with 1200+ tech skills courses.