Kompletní tabulka římských číslic. Z Basry do Říma. Převod arabských čísel na římská čísla

O transformaci.

Římské číslice jsou nepoziční číselný systém, to znamená, že všechny výpočty nepocházejí z číslice číslice, jako v obvyklé desítkové soustavě, ale přímo z hodnoty číslice. V římském systému je pouze 7 čísel, zde jsou: , PROTI, X, L, C, D, M. Všechna čísla se skládají z těchto čísel.

II III IV PROTI VI VII VIII IX X
1 2 3 4 5 6 7 8 9 10
XI XX XXX XL L LX LXX LXXX XC C
11 20 30 40 50 60 70 80 90 100
CX CC CCC CD D DC DCC DCCC CM. M
110 200 300 400 500 600 700 800 900 1000
Příklad: 1964 = MCMLXIV

Pravidla pro převod arabských číslic na římská čísla

Pokud je číslice nalevo od dané číslice menší než ona, odečte se od dané číslice (princip odčítání). Pokud je to více, pak se to sčítá (princip sčítání). Například XLVII = XL (40 = 50 - 10) + V (5) + II (2) = 47. Existuje však jedna výjimka. Pokud vezmeme číslo 99 a pokusíme se ho přeložit, měli bychom dostat IC. Kompaktní, ale ne správné. V klasické římské číselné soustavě by číslo napravo (tedy od kterého se odečítalo) nemělo být větší než to nalevo vynásobené deseti. To znamená, že stejné číslo 99 musí být přeloženo doslovně XC (90 = 100 - 10) + IX (9 = 10 - 1) = XCIX. To znamená, že 49 nelze zapsat jako IL, pouze jako LXIX. Existuje ještě jedno pravidlo. Nemůžete opakovat čtyři číslice za sebou, to znamená, že číslo 40 nelze zapsat jako XXXX, ale pouze jako LX. Ze všech těchto pravidel vyplývá, že maximální počet, který lze zapsat římskými číslicemi, je MMMCMXCIX = 3999. Ale nezoufejte! Etruskové, kteří, jak se zdá, vynalezli římské číslice, byli chytří hoši a dělali to lstivě – číslo podtržené tyčkou nahoře znamená počet tisíců. To znamená, že 4000 by se mělo psát jako IV. Je to jednoduché.

Online překlad arabských číslic na římské číslice

arabské číslo:

římské číslo:

Hezký den, Habrausere.

Vyvíjel jsem hlavně pro platformu J2ME a vždy jsem se snažil do svých projektů přidat nějakou chuť. Jednoho dne jsem tedy potřeboval zvýraznit položky menu.

Opravdu jsem nechtěl používat standardní řešení, používat pomlčku nebo je číslovat, ale pak jsem neměl žádné jiné možnosti. Při přemýšlení, jak nejlépe tyto body zformátovat, jsem náhodou narazil na svůj starý školní sešit z dějepisu, ve kterém byly body číslovány římskými číslicemi. Bingo!

Musím se přiznat, že moje znalost římských číslic mi tehdy stačila jen na počítání do druhé nebo třetí desítky. To obecně mělo na číslování bodů stačit. Ale jako každý programátor jsem chtěl mít hotové řešení, který dokáže převést libovolné celé číslo v desítkové soustavě Arabská čísla do jejich ekvivalentních římských.

Na Wikipedii byl článek popisující římské SS a brzy jsem načrtl algoritmus pro převod z arabských čísel na římská.

Základní čísla:

já - 1
V - 5
X - 10
L - 50
C - 100
D - 500
M – 1000

Není tam vůbec žádná nula, takže použijeme prázdnou hodnotu.

Samotný algoritmus je tedy poměrně jednoduchý:

1. Vyberte (pokud existuje) počet celých tisíců. Výsledná hodnota nám umožní vygenerovat řetězec s n číslem „M“ (čteme, n*1000).
Příklad: 2012 po první položce uvede „MM“

2. Dostaneme zbytek po dělení 1000, abychom v budoucnu vybrali následující hodnoty.

3. Vyberte (pokud možno) celých 500. Zároveň počítejte s tím, že pokud je výsledná hodnota 4 (5+4=9), pak by se měla psát jako hodnota 1000-100, což v římském SS je ekvivalentní „CM“.
Příklad: 1887 za tímto bodem nám dá "MD".
1945, respektive "MCM".

4. Dostaneme zbytek dělení 500.

5. Vydělením 100 vyberte celé stovky a přidejte k předchozímu výsledku. Bereme v úvahu, že pokud dostaneme 4, což je ekvivalent 400, zapíšeme to jako 500-100, tedy „CD“.
Příklad: 1709 po tomto kroku vydá "MDCCC".

6. Dostaneme zbytek dělení 100.

7. Vybereme z něj celou půlstovku. Pokud je hodnota 4 (tj. 90), zapíšeme ji jako 100-10, což se rovná „XC“. V opačném případě přidejte na řádek „L“.
Příklad: 1986 nám nakonec dá „MCML“.

8. Vyberte zbytek z 50.

9. Vyberte celé číslo v desítkách a do řetězce nkrát přidejte symbol „X“. Zároveň bereme v úvahu, že 40 se zapisuje jako 50-10, tedy „XL“.
Příklad: 1986 nám nakonec dá „MCMLXXX“.

10. Dostaneme zbytek dělení 10. Tento krok se od ostatních liší tím, že zbytek můžete okamžitě přirovnat k jeho ekvivalentu. 1=I, 7=VII a tak dále.

Po vyčíslení čísla pomocí tohoto algoritmu dostaneme něco takového:
2012 == MMXII
Níže je zdrojový kód v Javě, který implementuje algoritmus.
veřejná třída RoManiac ( /* Základní čísla: I - 1 V - 5 X - 10 L - 50 C - 100 D - 500 M - 1000 Není tam vůbec žádná nula, takže použijeme prázdnou hodnotu */ // Základní metoda pro převod z arabštiny na římský veřejný statický String convert(int in) ( StringBuffer a = new StringBuffer(""); // Přidělte tisíce int m1 = in / 1000; a.append(M(m1)); // co je zbývá po tisících int m2 = v % 1000 // Přidělit pět set ze zbytku tisíce int d1 = m2 / 500 // zbytek po přidělení půl tisíce int d2 = m2 % 500; int c1 = d2 / 100 a.append(C(c1) // zbytek stovek int c2 = d2 % 100 // Vyberte padesát int l1 = c2 / 50; Vyberte desítky int x1 = l2 / 10 // zbytek int x2 = l2 % 10; // s hodnotami, které jsou násobky deseti, ale ne 5, je vše jednoduché soukromé statické String M(int in) ( StringBuffer a = new StringBuffer("") ; int i = 0; zatímco já< in) { a.append("M"); i++; } return a.toString(); } // преобразовываем целые сотни private static String C(int in) { if (in == 4) return "CD"; //если 400, то 500-100 else if ((in != 0) && (in < 4)) { StringBuffer a = new StringBuffer(""); int i = 0; while (i < in) { a.append("C"); i++; } return a.toString(); } else return ""; } // целые десятки private static String X(int in) { if (in == 4) return "XL"; // если 40, то 50-10 else if ((in != 0) && (in < 4)) { StringBuffer a = new StringBuffer(""); int i = 0; while (i < in) { a.append("X"); i++; } return a.toString(); } else return ""; } // преобразовываем пол тысячи private static String D(int in) { if (in = 4) return "CM"; // если 900, то 1000-100 else return "D"; } private static String L(int in) { if (in = 4) return "XC"; / / если90 то100 - 10 return "L"; } // От 1 до 9, то что осталось private static String basic(int in) { String a = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" }; return a; } } P.S.: Už při psaní jsem si říkal, že by stálo za to zavést obrácenou konverzi.