Gegeven een string in Romeinse vorm, is het de taak om deze gegeven Romeinse string om te zetten in een geheel getal.
Romeinse cijfers zijn gebaseerd op de volgende symbolen:
Symbool | Waarde |
|---|---|
I voeten versus voet | 1 |
IN | 5 |
X shweta tiwari-acteur | 10 |
L | vijftig dfa-voorbeelden |
C | 100 |
D | 500 pete davidson-nationaliteit |
M | 1000 |
Voorbeeld:
Aanbevolen oefening Romeins getal tot geheel getal Probeer het!Invoer: IX
Uitgang: 9
Uitleg: IX is een Romeins symbool dat 9 vertegenwoordigtInvoer: XL
Uitgang: 40
Uitleg: XL is een Romeins symbool dat 40 vertegenwoordigtInvoer: MCMIV
Uitgang: 1904
Uitleg: M is duizend, CM is negenhonderd en IV is vier
Benadering: Een getal in Romeinse cijfers is een reeks van deze symbolen, geschreven in aflopende volgorde (bijvoorbeeld M's eerst, gevolgd door D's, enz.). Om echter te voorkomen dat in enkele specifieke gevallen vier tekens achter elkaar worden herhaald (zoals IIII of XXXX), subtractieve notatie wordt vaak als volgt gebruikt:
- I eerder geplaatst IN of X geeft één minder aan, dus vier is IV (één minder dan 5) en 9 is IX (één minder dan 10).
- X eerder geplaatst L of C geeft tien minder aan, dus veertig is XL (10 minder dan 50) en 90 is XC (tien minder dan honderd).
- C eerder geplaatst D of M geeft honderd minder aan, dus vierhonderd is CD (honderd minder dan vijfhonderd) en negenhonderd is CM (honderd minder dan duizend).
Algoritme om Romeinse cijfers om te zetten in gehele getallen:
selectie sorteren
- Splits de reeks Romeinse cijfers in Romeinse symbolen (teken).
- Converteer elk symbool van Romeinse cijfers naar de waarde die het vertegenwoordigt.
- Neem het symbool één voor één, beginnend bij index 0:
- Als de huidige waarde van het symbool groter is dan of gelijk is aan de waarde van het volgende symbool, tel dan deze waarde op bij het lopende totaal.
- Trek anders deze waarde af door de waarde van het volgende symbool bij het lopende totaal op te tellen.
Hieronder volgt de implementatie van het bovenstaande algoritme:
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) {// Waarde van het huidige symbool // is groter of gelijk aan // het volgende symbool res = res + s1; } else { // Waarde van het huidige symbool is // kleiner dan het volgende symbool res = res + s2 - s1; ik++; } } anders { res = res + s1; } } return res; } // Stuurprogrammacode int main() {// Gezien de gegeven invoer een geldige string is str = 'MCMIV'; uit<< '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) {// Waarde van het huidige symbool // is groter of gelijk aan // het volgende symbool res = res + s1; } else { // Waarde van het huidige symbool is // kleiner dan het volgende symbool res = res + s2 - s1; ik++; } } anders { res = res + s1; } } return res; } // Stuurprogrammacode int main() {// Gezien de gegeven invoer geldig is char str[10] = 'MCMIV'; printf('De gehele vorm van het Romeinse cijfer is %d',romanToDecimal(str)); retour 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) {// Waarde van het huidige symbool // is groter of gelijk aan // het volgende symbool res = res + s1; } else { // Waarde van het huidige symbool is // kleiner dan het volgende symbool res = res + s2 - s1; ik++; } } anders { res = res + s1; } } return res; } // Stuurprogrammacode public static void main(String args[]) { RomanToNumber ob = new RomanToNumber(); // Ervan uitgaande dat de gegeven invoer geldig is String str = 'MCMIV'; System.out.println('Gehele vorm van Romeins cijfer' + ' is ' + 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): # Waarde van het huidige symbool is groter # of gelijk aan het volgende symbool res = res + s1 i = i + 1 else: # Waarde van het huidige symbool is groter # of gelijk aan het volgende symbool res = res + s2 - s1 i = i + 2 else: res = res + s1 i = i + 1 return res # Stuurprogrammacode print('Gehele vorm van Romeins cijfer is'), print(romanToDecimal('MCMIV'))>'>C#= s2) {// Waarde van het huidige symbool is groter // of gelijk aan het volgende symbool res = res + s1; } anders { res = res + s2 - s1; ik++; // Waarde van het huidige symbool is // kleiner dan het volgende symbool } } else { res = res + s1; ik++; } } return res; } // Stuurprogrammacode public static void Main(string[] args) { GFG ob = new GFG(); // Gezien de gegeven invoer een geldige string is str = 'MCMIV'; Console.WriteLine('Gehele vorm van Romeins cijfer' + ' is ' + ob.romanToDecimal(str)); } } // Deze code is bijgedragen door 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) {// Waarde van het huidige symbool // is groter of gelijk aan // het volgende symbool $res = $res + $s1; } anders { $res = $res + $s2 - $s1; $i++; // Waarde van het huidige symbool is // kleiner dan het volgende symbool } } else { $res = $res + $s1; $i++; } } retourneer $res; } // Stuurprogrammacode // Met ingang van invoer // gegeven zijn geldig $str ='MCMIV'; echo 'De gehele vorm van het Romeinse cijfer is ', romanToDecimal($str), '
'; // Deze code is bijgedragen door ajit ?>> Uitvoer
Integer form of Roman Numeral is 1904>
Complexiteitsanalyse:
- Tijdcomplexiteit: O(n), waarbij n de lengte van de string is.
Er is slechts één verplaatsing van de string vereist. - Hulpruimte: O(1), Omdat er geen extra ruimte nodig is.