Cyfry rzymskie to siedem liter: I, V, X, L, C, D i M, z których składa się każdą liczbę od 1 do 3999 według dwóch zasad, dodawania i odejmowania. Poniżej jest tabela od 1 do 100, tabela do składania liczb do 3999, zapis wieków i dat według zasad pisowni PWN oraz konwerter w Pythonie i JavaScripcie z walidacją. Wszystkie tabele wygenerowaliśmy programem, a kod uruchomiliśmy i sprawdziliśmy na wszystkich 3999 liczbach.
Spis treści
- Siedem znaków i ich wartości
- Zasady zapisu
- Tabela od 1 do 100
- Liczby do 1000 i do 3999
- Zamiana krok po kroku
- Odczyt liczby rzymskiej
- Wieki, piętra i daty w polskiej pisowni
- Liczby powyżej 3999 i zero
- Konwerter w Pythonie i JavaScripcie
- Ćwiczenia z odpowiedziami
- Najczęstsze pytania
Cyfry rzymskie: 7 znaków i ich wartości
Rzymski system zapisu ma siedem znaków. Każdy oznacza stałą wartość, niezależnie od miejsca w liczbie, i to odróżnia go od naszego systemu pozycyjnego, w którym ta sama cyfra 2 znaczy dwa, dwadzieścia albo dwieście.
| Znak | Wartość | Skąd się wziął |
|---|---|---|
| I | 1 | pionowa kreska, jeden element |
| V | 5 | pochodzenie niepewne |
| X | 10 | zestawienie dwóch znaków V |
| L | 50 | przypomina dolną połowę C |
| C | 100 | łac. centum, sto |
| D | 500 | być może prawa połowa greckiego Φ |
| M | 1000 | łac. mille, tysiąc |
Pochodzenie znaków podajemy za hasłem Wikipedii, które powołuje się na “Encyklopedię szkolną. Matematyka” (WSiP, 1990).
Rzymianie numerowali tak choćby wejścia do Koloseum. Zdjęcie nad tytułem pokazuje numer LIII, czyli 53, nad jednym z nich (fot. David Castor, Wikimedia Commons, licencja CC0).
Znaki I, X, C i M można powtórzyć najwyżej trzy razy z rzędu, a V, L i D występują w liczbie najwyżej raz. Odejmować wolno tylko w sześciu parach: I przed V i X, X przed L i C, C przed D i M.
Zasady zapisu liczb rzymskich
Liczbę rzymską czyta się od lewej do prawej i dodaje wartości znaków. Wyjątkiem jest mniejszy znak przed większym w jednej z sześciu dozwolonych par: wtedy mniejszy się odejmuje. Tak opisuje to Wikipedia w haśle o rzymskim systemie zapisu: znaki jednakowe się dodaje, mniejsze przed większymi odejmuje, mniejsze za większymi dodaje.
Współczesny zapis, którego uczy szkoła i którego używają programy, ma cztery reguły:
- Dodawanie. Znaki ustawia się od największego do najmniejszego i sumuje: XVI = 10 + 5 + 1 = 16.
- Odejmowanie tylko w sześciu parach. IV (4), IX (9), XL (40), XC (90), CD (400) i CM (900). Inne pary, na przykład IC dla 99 albo VX dla 5, są błędne.
- Najwyżej trzy takie same znaki z rzędu. III to 3, ale 4 to IV, a nie IIII. Dotyczy to I, X, C i M.
- V, L i D nie powtarzają się. Dziesięć to X, a nie VV.
Te reguły to konwencja. W średniowiecznych rękopisach czwórkę pisano często jako iiii albo iiij, a na tarczach zegarów z cyframi rzymskimi tradycyjnie stoi IIII zamiast IV. Wikipedia odnotowuje też zapisy skrócone, na przykład MIM zamiast MCMXCIX dla 1999, i nazywa je modyfikacją. W tym artykule, w tabelach i w konwerterach używamy współczesnego zapisu standardowego z czterema regułami powyżej.
Tabela liczb rzymskich od 1 do 100
Poniżej wszystkie liczby od 1 do 100. Tabelę wygenerowała funkcja z sekcji o konwerterze, a każdy zapis przeszedł z powrotem przez funkcję odczytu i dał tę samą liczbę.
| Liczba | Zapis | Liczba | Zapis | Liczba | Zapis | Liczba | Zapis | Liczba | Zapis |
|---|---|---|---|---|---|---|---|---|---|
| 1 | I | 21 | XXI | 41 | XLI | 61 | LXI | 81 | LXXXI |
| 2 | II | 22 | XXII | 42 | XLII | 62 | LXII | 82 | LXXXII |
| 3 | III | 23 | XXIII | 43 | XLIII | 63 | LXIII | 83 | LXXXIII |
| 4 | IV | 24 | XXIV | 44 | XLIV | 64 | LXIV | 84 | LXXXIV |
| 5 | V | 25 | XXV | 45 | XLV | 65 | LXV | 85 | LXXXV |
| 6 | VI | 26 | XXVI | 46 | XLVI | 66 | LXVI | 86 | LXXXVI |
| 7 | VII | 27 | XXVII | 47 | XLVII | 67 | LXVII | 87 | LXXXVII |
| 8 | VIII | 28 | XXVIII | 48 | XLVIII | 68 | LXVIII | 88 | LXXXVIII |
| 9 | IX | 29 | XXIX | 49 | XLIX | 69 | LXIX | 89 | LXXXIX |
| 10 | X | 30 | XXX | 50 | L | 70 | LXX | 90 | XC |
| 11 | XI | 31 | XXXI | 51 | LI | 71 | LXXI | 91 | XCI |
| 12 | XII | 32 | XXXII | 52 | LII | 72 | LXXII | 92 | XCII |
| 13 | XIII | 33 | XXXIII | 53 | LIII | 73 | LXXIII | 93 | XCIII |
| 14 | XIV | 34 | XXXIV | 54 | LIV | 74 | LXXIV | 94 | XCIV |
| 15 | XV | 35 | XXXV | 55 | LV | 75 | LXXV | 95 | XCV |
| 16 | XVI | 36 | XXXVI | 56 | LVI | 76 | LXXVI | 96 | XCVI |
| 17 | XVII | 37 | XXXVII | 57 | LVII | 77 | LXXVII | 97 | XCVII |
| 18 | XVIII | 38 | XXXVIII | 58 | LVIII | 78 | LXXVIII | 98 | XCVIII |
| 19 | XIX | 39 | XXXIX | 59 | LIX | 79 | LXXIX | 99 | XCIX |
| 20 | XX | 40 | XL | 60 | LX | 80 | LXXX | 100 | C |
Najdłuższy zapis do stu ma liczba 88: LXXXVIII, osiem znaków. Dziewięćdziesiąt dziewięć to XCIX, czyli 90 + 9, a nie IC, bo I wolno odjąć tylko od V i X.

Liczby rzymskie do 1000 i do 3999
Każdą liczbę do 3999 składa się z gotowych kawałków: osobno tysiące, setki, dziesiątki i jedności, od lewej. Ta tabela wystarcza, żeby zapisać dowolną liczbę z tego zakresu bez liczenia.
| Cyfra | Jedności | Dziesiątki | Setki | Tysiące |
|---|---|---|---|---|
| 1 | I | X | C | M |
| 2 | II | XX | CC | MM |
| 3 | III | XXX | CCC | MMM |
| 4 | IV | XL | CD | – |
| 5 | V | L | D | – |
| 6 | VI | LX | DC | – |
| 7 | VII | LXX | DCC | – |
| 8 | VIII | LXXX | DCCC | – |
| 9 | IX | XC | CM | – |
Przykład: 768 to 7 setek, 6 dziesiątek i 8 jedności, czyli DCC + LX + VIII = DCCLXVIII. Zero w którejś pozycji po prostu się pomija: 404 to CD + IV = CDIV. Największa liczba w zapisie standardowym to 3999 = MMMCMXCIX, a najdłuższa to 3888 = MMMDCCCLXXXVIII, piętnaście znaków.
Frontend Master 2026 · Kodożercy
Wreszcie rozumiesz, dlaczego kod od AI raz działa, a raz nie
Frontend Master 2026 to pakiet sześciu kursów Kodożerców, który daje Ci język do prowadzenia kodu od AI: poprawiania, łączenia, rozszerzania i szybkiego znajdowania linijki, którą trzeba zmienić. Bez teorii dla samej teorii.
Wchodzę w to →
Jak zamienić liczbę na rzymską krok po kroku
Zamiana polega na odejmowaniu od liczby największej wartości z listy, która jeszcze się mieści, i dopisywaniu jej znaku. Lista ma trzynaście pozycji: siedem znaków i sześć par odejmowania, od największej do najmniejszej.
- Weź listę: 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.
- Znajdź największą wartość, która nie przekracza liczby.
- Dopisz jej znak do wyniku i odejmij wartość od liczby.
- Powtarzaj, aż zostanie zero.
Dla 1999: 1999 − 1000 daje M, 999 − 900 daje CM, 99 − 90 daje XC, 9 − 9 daje IX. Wynik to MCMXCIX. Dla 444 kolejno CD, XL, IV, więc CDXLIV. Dla 2026 dwa razy M, dwa razy X, potem V i I, czyli MMXXVI. Taki sposób, w którym zawsze bierzemy największy pasujący kawałek, informatycy nazywają algorytmem zachłannym. Jego przebieg łatwo rozrysować na schemacie blokowym.

Jak odczytać liczbę rzymską
Liczbę rzymską odczytuje się, dzieląc ją na kawałki z tabeli składania i sumując je. MCMXLIV to M (1000) + CM (900) + XL (40) + IV (4) = 1944. MMXXIV to 1000 + 1000 + 10 + 10 + 4 = 2024.
Program robi to prościej: idzie od prawej do lewej i dodaje wartość znaku, chyba że jest mniejsza od największej dotąd spotkanej. Wtedy ją odejmuje. W MCMXLIV od prawej: V (+5), I (−1, bo 1 < 5), L (+50), X (−10), M (+1000), C (−100), M (+1000). Suma to 1944.
Sama suma nie wystarczy do sprawdzenia, czy zapis jest poprawny. IIII i IC też dadzą się “policzyć” (4 i 99), choć nie są zapisem standardowym. Dlatego konwerter niżej najpierw sprawdza zapis wyrażeniem regularnym, a dopiero potem liczy.
Cyfry rzymskie w polskiej pisowni: wieki, piętra, daty
Po liczebniku porządkowym zapisanym cyframi rzymskimi nie stawia się kropki. Tak mówi zasada 88.5 w Zasadach pisowni PWN [353] i podaje przykłady: “na początku XVII wieku”, “Jan III Sobieski”, “Mieszkali na IV piętrze”. Wyjątek to tytuły rozdziałów, w których kropkę stawia się zwyczajowo: “XII. Zasady interpunkcji”. Poradnia Językowa PWN potwierdziła to w grudniu 2025 roku na przykładzie “I. Wstęp” w spisie treści.
Miesiąc w dacie też można zapisać cyframi rzymskimi, bez kropek między częściami. Zasada 88.6 [354] podaje przykład “4 VI 1989 roku”. Ta sama data słownie to 4 czerwca 1989 roku.
Wiek to numer setki lat, licząc od roku 1. Rok 2026 należy do XXI wieku, rok 1683 do XVII wieku, a rok 1900 jeszcze do XIX wieku, bo każdy wiek kończy się rokiem z dwoma zerami. Słownie XIV wiek to czternasty wiek, a XXI wiek to dwudziesty pierwszy wiek.
| Zastosowanie | Przykład | Kropka po cyfrze |
|---|---|---|
| wiek | XVII wiek, XXI wiek | nie |
| władca, papież | Jan III Sobieski | nie |
| piętro, klasa | IV piętro, klasa VIII | nie |
| miesiąc w dacie | 4 VI 1989 | nie |
| tytuł rozdziału | XII. Zasady interpunkcji | tak, zwyczajowo |
Liczby większe niż 3999 i brak zera
Zapis standardowy kończy się na 3999, bo M wolno powtórzyć najwyżej trzy razy. Rzymianie zapisywali większe liczby kreską nad znakiem, która mnożyła go przez tysiąc. Dr hab. Adam Wolański w odpowiedzi Poradni Językowej PWN podaje przykład: XL z kreską nad znakami to 40 × 1000 = 40 000. Liczba ujęta w dwie pionowe kreski była sto razy większa, więc |MD| to 150 000.
Ta sama porada wyjaśnia, że poziome kreski nad i pod zwykłymi cyframi rzymskimi, spotykane w piśmie odręcznym, to rodzaj ozdobnika. W piśmie ręcznym i w napisach kutych w kamieniu nie są błędem.
Zera system rzymski nie ma. Według Wikipedii zero nie miało własnego znaku, bo “nic” nie uchodziło za wartość liczby. Dlatego konwertery, także nasz, przyjmują liczby od 1 do 3999, a dla 0 i liczb ujemnych zgłaszają błąd.
Konwerter liczb rzymskich w Pythonie i JavaScripcie
Konwerter ma dwie funkcje: zamianę liczby na zapis rzymski (algorytm zachłanny z listą 13 par) i odczyt zapisu rzymskiego z walidacją. Walidację robi wyrażenie regularne, które przepuszcza tylko zapis standardowy od I do MMMCMXCIX:
^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
Wzorzec ma cztery części, po jednej na tysiące, setki, dziesiątki i jedności. Każda dopuszcza dokładnie te kawałki, które są w tabeli składania. Dlatego IIII, IC, VX i MMMM nie przejdą, a pusty napis odrzuca osobny warunek w kodzie.
Konwerter w Pythonie
import re
PARY = [
(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"),
]
WARTOSCI = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
# Poprawny zapis standardowy od I do MMMCMXCIX (1-3999)
WZORZEC = re.compile(r"^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$")
def na_rzymskie(n: int) -> str:
if not isinstance(n, int) or isinstance(n, bool):
raise TypeError("podaj liczbę całkowitą")
if not 1 <= n <= 3999:
raise ValueError("zapis standardowy obejmuje liczby od 1 do 3999")
wynik = []
for wartosc, znaki in PARY:
while n >= wartosc:
wynik.append(znaki)
n -= wartosc
return "".join(wynik)
def na_arabskie(tekst: str) -> int:
s = tekst.strip().upper()
if not s or not WZORZEC.match(s):
raise ValueError(f"niepoprawna liczba rzymska: {tekst!r}")
suma = 0
poprzednia = 0
for znak in reversed(s):
w = WARTOSCI[znak]
if w < poprzednia:
suma -= w
else:
suma += w
poprzednia = w
return suma
Funkcja na_arabskie przyjmuje też małe litery (“mmxxvi” daje 2026), bo zamienia napis na wielkie litery przed sprawdzeniem.
Konwerter w JavaScripcie
const PARY = [
[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"],
];
const WARTOSCI = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
const WZORZEC = /^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/;
function naRzymskie(n) {
if (!Number.isInteger(n) || n < 1 || n > 3999) {
throw new RangeError("zapis standardowy obejmuje liczby od 1 do 3999");
}
let wynik = "";
for (const [wartosc, znaki] of PARY) {
while (n >= wartosc) {
wynik += znaki;
n -= wartosc;
}
}
return wynik;
}
function naArabskie(tekst) {
const s = String(tekst).trim().toUpperCase();
if (!s || !WZORZEC.test(s)) {
throw new RangeError(`niepoprawna liczba rzymska: "${tekst}"`);
}
let suma = 0;
let poprzednia = 0;
for (const znak of [...s].reverse()) {
const w = WARTOSCI[znak];
if (w < poprzednia) {
suma -= w;
} else {
suma += w;
poprzednia = w;
}
}
return suma;
}
module.exports = { naRzymskie, naArabskie };
Testy: co sprawdziliśmy
Oba konwertery uruchomiliśmy 21 października 2026 roku (Python 3.14.3, Node.js 22.11.0) z analogicznym zestawem testów. Każda liczba od 1 do 3999 po zamianie na zapis rzymski i z powrotem dała siebie samą. Siedem przykładów zgodziło się z oczekiwanym zapisem, między innymi 2026 = MMXXVI, 1999 = MCMXCIX i 3999 = MMMCMXCIX. Błędne wejścia zostały odrzucone: “”, IIII, IC, VX, IL, MMMM, VV, XM, ABC, IIV oraz liczby 0, 4000 i −5, a w JavaScripcie dodatkowo 2,5. Wynik:
Python: 3999 liczb tam i z powrotem OK, 7 przykładów OK, 13 błędnych wejść odrzuconych
MMXXVI 1944 2026
JavaScript: 3999 liczb tam i z powrotem OK, 7 przykładów OK, 14 błędnych wejść odrzuconych
MMXXVI 1944 2026
Cyfry rzymskie w HTML i CSS bez kodu
Do numerowania listy na stronie konwerter nie jest potrzebny. Element <ol type="I"> numeruje punkty wielkimi cyframi rzymskimi, a type="i" małymi, co opisuje dokumentacja MDN elementu ol. To samo daje w CSS list-style-type: upper-roman. Specyfikacja CSS Counter Styles Level 3 definiuje styl upper-roman dokładnie tą samą listą 13 par co nasz kod i zakresem od 1 do 3999. Poza zakresem przeglądarka przechodzi na styl zastępczy, domyślnie zwykłe cyfry.
Unicode ma też osobne znaki cyfr rzymskich, od Ⅰ (U+2160) do Ⅿ (U+216F), w tym gotowe Ⅻ dla 12. W bazie Unicode mają rozkład zgodnościowy (<compat>), więc normalizacja NFKC zamienia je na zwykłe litery, co sprawdziliśmy modułem unicodedata w Pythonie. Dlatego w tekście i w danych lepiej od razu pisać literami I, V, X. Więcej o tym, jak komputer zapisuje znaki, jest w tekście o kodzie ASCII i tabeli znaków.
Ćwiczenia z cyfr rzymskich z odpowiedziami
Odpowiedzi policzył konwerter z tego artykułu. Zakryj prawą część i sprawdź się.
A. Zapisz cyframi rzymskimi: 7, 19, 38, 64, 99, 145, 404, 768, 1987, 2026.
Odpowiedzi: VII, XIX, XXXVIII, LXIV, XCIX, CXLV, CDIV, DCCLXVIII, MCMLXXXVII, MMXXVI.
B. Zamień na liczby arabskie: XXIV, XLII, LXXXVIII, XCIX, CXL, CDXC, DCCCXC, MCMXIV, MMXXIV, MMMCDXLIV.
Wyniki: 24, 42, 88, 99, 140, 490, 890, 1914, 2024, 3444.
C. Znajdź błąd i popraw: IIII, VX, IC, MMMM.
Poprawki: IIII to w zapisie standardowym IV, VX to po prostu V, 99 to XCIX, a 4000 nie ma zapisu standardowego, bo M powtarza się najwyżej trzy razy.
Najczęstsze pytania
Jak napisać 2026 cyframi rzymskimi?
MMXXVI. Dwa tysiące to MM, dwadzieścia to XX, sześć to VI. Rok 2027 to MMXXVII, a 2025 to MMXXV.
Czy IIII jest poprawne?
W zapisie standardowym nie. Cztery to IV, bo ten sam znak wolno postawić najwyżej trzy razy z rzędu. Zapis IIII istnieje w historii i na tarczach wielu zegarów, ale w szkole, w dokumentach i w programach uchodzi za błąd.
Jak zapisać 4000 cyframi rzymskimi?
W zapisie standardowym się nie da, bo ten kończy się na 3999 (MMMCMXCIX). Historycznie 4000 zapisywano jako IV z kreską nad znakami, która mnoży wartość przez tysiąc.
Czy po cyfrze rzymskiej stawia się kropkę?
Po liczebniku porządkowym nie: XVII wiek, Jan III Sobieski, IV piętro. Kropkę stawia się zwyczajowo tylko po numerze rozdziału w tytule, na przykład “XII. Zasady interpunkcji”.
Podsumowanie
Cyfry rzymskie to siedem znaków: I (1), V (5), X (10), L (50), C (100), D (500) i M (1000). Liczbę składa się, dodając wartości od największej, a mniejszy znak przed większym odejmuje się tylko w sześciu parach: IV, IX, XL, XC, CD i CM. Ten sam znak stoi najwyżej trzy razy z rzędu, a V, L i D się nie powtarzają, dlatego zapis standardowy obejmuje liczby od 1 do 3999 i nie ma zera. Według zasad PWN po liczebniku porządkowym zapisanym cyframi rzymskimi nie stawia się kropki: XXI wiek, IV piętro, 4 VI 1989. Konwerter w Pythonie i JavaScripcie zamienia liczbę algorytmem zachłannym, a odczyt poprzedza walidacja wyrażeniem regularnym. Na stronie wystarczy list-style-type: upper-roman.
Newsletter · DevstockAcademy & Kodożercy
Bądź na bieżąco ze światem IT, AI i automatyzacji
Co wtorek: newsy z branży, praktyczne tipy i narzędzia które warto znać. Zero spamu.



