Daný reťazec v rímskej forme je úlohou previesť tento daný rímsky reťazec na celé číslo.
rímske číslice sú založené na nasledujúcich symboloch:
Symbol | Hodnota |
|---|---|
ja terminál kali linux | 1 |
V | 5 |
X príkaz java if else | 10 |
L dekódovanie javascript base64 | päťdesiat |
C | 100 |
D | 500 |
M | 1000 |
Príklad:
Odporúčaná prax Roman Number to Integer Vyskúšajte to!Vstup: IX
Výkon: 9
Vysvetlenie: IX je rímsky symbol, ktorý predstavuje 9reťazec obsahuje javaVstup: XL
Výkon: 40
Vysvetlenie: XL je rímsky symbol, ktorý predstavuje 40prečiarknutieVstup: MCMIV
Výkon: 1904
Vysvetlenie: M je tisíc, CM je deväťsto a IV je štyri
Prístup: Číslo v rímskych čísliciach je reťazec týchto symbolov napísaný v zostupnom poradí (napr. prvé M, za ním D atď.). Avšak v niekoľkých špecifických prípadoch, aby sa predišlo opakovaniu štyroch znakov za sebou (napríklad IIII alebo XXXX), subtraktívny zápis sa často používa nasledovne:
- ja umiestnené pred V alebo X označuje o jeden menej, teda štyri je IV (o jedno menej ako 5) a 9 je IX (o jedno menej ako 10).
- X umiestnené pred L alebo C označuje o desať menej, teda štyridsať je XL (10 menej ako 50) a 90 je XC (o desať menej ako sto).
- C umiestnené pred D alebo M označuje o sto menej, teda štyristo je CD (sto menej ako päťsto) a deväťsto je CM (o sto menej ako tisíc).
Algoritmus na prevod rímskych číslic na celé číslo:
- Rozdeľte reťazec rímskych číslic na rímske symboly (znak).
- Preveďte každý symbol rímskych číslic na hodnotu, ktorú predstavuje.
- Vezmite symbol jeden po druhom od indexu 0:
- Ak je aktuálna hodnota symbolu väčšia alebo rovná hodnote nasledujúceho symbolu, pripočítajte túto hodnotu k priebežnému súčtu.
- inak túto hodnotu odčítajte pridaním hodnoty ďalšieho symbolu k priebežnému súčtu.
Nasleduje implementácia vyššie uvedeného algoritmu:
C++ // Program to convert Roman // Numerals to Numbers #include using namespace std; // This function returns value // of a Roman symbol int value(char r) { if (r == 'I') return 1; if (r == 'V') return 5; if (r == 'X') return 10; if (r == 'L') return 50; if (r == 'C') return 100; if (r == 'D') return 500; if (r == 'M') return 1000; return -1; } // Returns decimal value of // roman numaral int romanToDecimal(string& str) { // Initialize result int res = 0; // Traverse given input for (int i = 0; i < str.length(); i++) { // Getting value of symbol s[i] int s1 = value(str[i]); if (i + 1 < str.length()) { // Getting value of symbol s[i+1] int s2 = value(str[i + 1]); // Comparing both values if (s1>= s2) { // Hodnota aktuálneho symbolu // je väčšia alebo rovná // nasledujúci symbol res = res + s1; } else { // Hodnota aktuálneho symbolu je // menšia ako nasledujúci symbol res = res + s2 - s1; i++; } } else { res = res + s1; } } return res; } // Kód ovládača int main() { // Vzhľadom na zadané vstupy sú platné reťazce str = 'MCMIV'; cout<< 'Integer form of Roman Numeral is ' << romanToDecimal(str) << endl; return 0; }> C // Program to convert Roman // Numerals to Numbers #include #include // This function returns value // of a Roman symbol int value(char r) { if (r == 'I') return 1; if (r == 'V') return 5; if (r == 'X') return 10; if (r == 'L') return 50; if (r == 'C') return 100; if (r == 'D') return 500; if (r == 'M') return 1000; return -1; } // Returns decimal value of // roman numaral int romanToDecimal(char str[]) { // Initialize result int res = 0; // Traverse given input for (int i = 0; i < strlen(str); i++) { // Getting value of symbol s[i] int s1 = value(str[i]); if (i + 1 < strlen(str)) { // Getting value of symbol s[i+1] int s2 = value(str[i + 1]); // Comparing both values if (s1>= s2) { // Hodnota aktuálneho symbolu // je väčšia alebo rovná // nasledujúci symbol res = res + s1; } else { // Hodnota aktuálneho symbolu je // menšia ako nasledujúci symbol res = res + s2 - s1; i++; } } else { res = res + s1; } } return res; } // Kód ovládača int main() { // Vzhľadom na to, že zadané vstupy sú platné char str[10] = 'MCMIV'; printf('Celé číslo rímskeho čísla je %d',romanToDecimal(str)); návrat 0; }> Java // Program to convert Roman // Numerals to Numbers import java.util.*; public class RomanToNumber { // This function returns // value of a Roman symbol int value(char r) { if (r == 'I') return 1; if (r == 'V') return 5; if (r == 'X') return 10; if (r == 'L') return 50; if (r == 'C') return 100; if (r == 'D') return 500; if (r == 'M') return 1000; return -1; } // Finds decimal value of a // given roman numeral int romanToDecimal(String str) { // Initialize result int res = 0; for (int i = 0; i < str.length(); i++) { // Getting value of symbol s[i] int s1 = value(str.charAt(i)); // Getting value of symbol s[i+1] if (i + 1 < str.length()) { int s2 = value(str.charAt(i + 1)); // Comparing both values if (s1>= s2) { // Hodnota aktuálneho symbolu // je väčšia alebo rovná // nasledujúci symbol res = res + s1; } else { // Hodnota aktuálneho symbolu je // menšia ako nasledujúci symbol res = res + s2 - s1; i++; } } else { res = res + s1; } } return res; } // Kód ovládača public static void main(String args[]) { RomanToNumber ob = new RomanToNumber(); // Vzhľadom na to, že zadané vstupy sú platné String str = 'MCMIV'; System.out.println('Celé číslo rímskeho čísla' + ' je ' + ob.romanToDecimal(str)); } }> Python # Python program to convert Roman Numerals # to Numbers # This function returns value of each Roman symbol def value(r): if (r == 'I'): return 1 if (r == 'V'): return 5 if (r == 'X'): return 10 if (r == 'L'): return 50 if (r == 'C'): return 100 if (r == 'D'): return 500 if (r == 'M'): return 1000 return -1 def romanToDecimal(str): res = 0 i = 0 while (i < len(str)): # Getting value of symbol s[i] s1 = value(str[i]) if (i + 1 < len(str)): # Getting value of symbol s[i + 1] s2 = value(str[i + 1]) # Comparing both values if (s1>= s2): # Hodnota aktuálneho symbolu je väčšia # alebo sa rovná ďalšiemu symbolu res = res + s1 i = i + 1 else: # Hodnota aktuálneho symbolu je väčšia # alebo sa rovná ďalšiemu symbolu res = res + s2 - s1 i = i + 2 else: res = res + s1 i = i + 1 return res # Tlač kódu ovládača ('Celočíselná forma rímskeho čísla je'), print(romanToDecimal('MCMIV'))>'>C#= s2) { // Hodnota aktuálneho symbolu je väčšia // alebo sa rovná nasledujúcemu symbolu res = res + s1; } else { res = res + s2 - s1; i++; // Hodnota aktuálneho symbolu je // menšia ako nasledujúci symbol } } else { res = res + s1; i++; } } return res; } // Kód ovládača public static void Main(string[] args) { GFG ob = new GFG(); // Vzhľadom na zadané vstupy sú platné reťazce str = 'MCMIV'; Console.WriteLine('Celočíselná forma rímskeho čísla' + ' je ' + ob.romanToDecimal(str)); } } // Tento kód prispel Shrikant13> Javascript >
PHP // Program to convert Roman // Numerals to Numbers // This function returns // value of a Roman symbol function value($r) { if ($r == 'I') return 1; if ($r == 'V') return 5; if ($r == 'X') return 10; if ($r == 'L') return 50; if ($r == 'C') return 100; if ($r == 'D') return 500; if ($r == 'M') return 1000; return -1; } // Returns decimal value // of roman numeral function romanToDecimal(&$str) { // Initialize result $res = 0; // Traverse given input for ($i = 0; $i < strlen($str); $i++) { // Getting value of // symbol s[i] $s1 = value($str[$i]); if ($i+1 < strlen($str)) { // Getting value of // symbol s[i+1] $s2 = value($str[$i + 1]); // Comparing both values if ($s1>= $s2) { // Hodnota aktuálneho symbolu // je väčšia alebo rovná // nasledujúci symbol $res = $res + $s1; } else { $res = $res + $s2 - $s1; $i++; // Hodnota aktuálneho symbolu je // menšia ako nasledujúci symbol } } else { $res = $res + $s1; $i++; } } return $res; } // Kód ovládača // Vzhľadom na to, že vstupy // sú platné $str ='MCMIV'; echo 'Celočíselná forma rímskeho čísla je ', romanToDecimal($str), '
'; // Do tohto kódu prispel ajit ?>> Výkon
Integer form of Roman Numeral is 1904>
Analýza zložitosti:
- Časová zložitosť: O(n), kde n je dĺžka reťazca.
Vyžaduje sa iba jeden prechod struny. - Pomocný priestor: O(1), pretože nie je potrebný žiadny ďalší priestor.