Bei einer gegebenen Zeichenfolge in römischer Form besteht die Aufgabe darin, diese gegebene römische Zeichenfolge in eine ganze Zahl umzuwandeln.
römische Zahlen basieren auf folgenden Symbolen:
Symbol | Wert |
|---|---|
ICH Java-Slice | 1 |
IN | 5 |
X Prioritätswarteschlange Java | 10 |
L | fünfzig |
C | 100 |
D ymail | 500 |
M | 1000 |
Beispiel:
Bash-String-Länge
Empfohlene Übung: Römische Zahl in ganze Zahl umwandeln Probieren Sie es aus!Eingang: IX
Ausgabe: 9
Erläuterung: IX ist ein römisches Symbol, das 9 darstelltEingang: XL
Ausgabe: 40
Erläuterung: XL ist ein römisches Symbol, das 40 darstelltEingang: MCMIV
Ausgabe: 1904
Erläuterung: M ist tausend, CM ist neunhundert und IV ist vier
Ansatz: Eine Zahl in römischen Ziffern ist eine Folge dieser Symbole in absteigender Reihenfolge (z. B. Ms zuerst, gefolgt von Ds usw.). Um jedoch in einigen besonderen Fällen zu vermeiden, dass sich vier Zeichen nacheinander wiederholen (z. B. IIII oder XXXX), Subtraktive Notation wird oft wie folgt verwendet:
YouTube-Werbung auf Android blockieren
- ICH davor platziert IN oder X bedeutet eins weniger, also vier IV (eins weniger als 5) und 9 ist IX (eins weniger als 10).
- X davor platziert L oder C bedeutet zehn weniger, also vierzig XL (10 weniger als 50) und 90 ist XC (zehn weniger als hundert).
- C davor platziert D oder M bedeutet hundert weniger, also vierhundert CD (einhundert weniger als fünfhundert) und neunhundert ist CM (hundert weniger als tausend).
Algorithmus zur Umwandlung römischer Ziffern in Ganzzahlen:
- Teilen Sie die römische Ziffernfolge in römische Symbole (Zeichen) auf.
- Konvertieren Sie jedes Symbol der römischen Ziffern in den Wert, den es darstellt.
- Nehmen Sie das Symbol nacheinander ab Index 0:
- Wenn der aktuelle Wert des Symbols größer oder gleich dem Wert des nächsten Symbols ist, addieren Sie diesen Wert zur laufenden Summe.
- Andernfalls subtrahieren Sie diesen Wert, indem Sie den Wert des nächsten Symbols zur laufenden Summe addieren.
Es folgt die Implementierung des obigen Algorithmus:
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) { // Wert des aktuellen Symbols // ist größer oder gleich // dem nächsten Symbol res = res + s1; } else { // Wert des aktuellen Symbols ist // kleiner als das nächste Symbol res = res + s2 - s1; i++; } } else { res = res + s1; } } return res; } // Treibercode int main() { // Unter Berücksichtigung gegebener Eingaben sind sie gültig string 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) { // Wert des aktuellen Symbols // ist größer oder gleich // dem nächsten Symbol res = res + s1; } else { // Wert des aktuellen Symbols ist // kleiner als das nächste Symbol res = res + s2 - s1; i++; } } else { res = res + s1; } } return res; } // Treibercode int main() { // Unter Berücksichtigung gegebener Eingaben sind diese gültig char str[10] = 'MCMIV'; printf('Ganzzahlform der römischen Zahl ist %d',romanToDecimal(str)); 0 zurückgeben; }> 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) { // Wert des aktuellen Symbols // ist größer oder gleich // dem nächsten Symbol res = res + s1; } else { // Wert des aktuellen Symbols ist // kleiner als das nächste Symbol res = res + s2 - s1; i++; } } else { res = res + s1; } } return res; } // Treibercode public static void main(String args[]) { RomanToNumber ob = new RomanToNumber(); // Unter Berücksichtigung gegebener Eingaben sind diese gültig String str = 'MCMIV'; System.out.println('Integer form of Roman Numeral' + ' 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): # Wert des aktuellen Symbols ist größer # oder gleich dem nächsten Symbol res = res + s1 i = i + 1 sonst: # Wert des aktuellen Symbols ist größer # oder gleich dem nächsten Symbol res = res + s2 - s1 i = i + 2 sonst: res = res + s1 i = i + 1 return res # Treibercode print('Integer form of Roman Numeral is'), print(romanToDecimal('MCMIV'))>'>C#= s2) { // Wert des aktuellen Symbols ist größer // oder gleich dem nächsten Symbol res = res + s1; } else { res = res + s2 - s1; i++; // Wert des aktuellen Symbols ist // kleiner als das nächste Symbol } } else { res = res + s1; i++; } } return res; } // Treibercode public static void Main(string[] args) { GFG ob = new GFG(); // Unter Berücksichtigung gegebener Eingaben sind sie gültig string str = 'MCMIV'; Console.WriteLine('Integer form of Roman Numeral' + ' is ' + ob.romanToDecimal(str)); } } // Dieser Code wurde von Shrikant13>'> beigesteuert Javascript= s2) { // Wert des aktuellen Symbols // ist größer oder gleich // dem nächsten Symbol res = res + s1; } else { // Wert des aktuellen Symbols ist // kleiner als das nächste Symbol res = res + s2 - s1; i++; } } else { res = res + s1; } } return res; } // Treibercode // Unter Berücksichtigung gegebener Eingaben sind sie gültig var str = 'MCMIV'; document.write('Integer form of Roman Numeral' + ' is ' + romanToDecimal(str)); // Dieser Code wurde von umadevi9616 beigesteuert> 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) { // Wert des aktuellen Symbols // ist größer oder gleich // dem nächsten Symbol $res = $res + $s1; } else { $res = $res + $s2 - $s1; $i++; // Wert des aktuellen Symbols ist // kleiner als das nächste Symbol } } else { $res = $res + $s1; $i++; } } return $res; } // Treibercode // Berücksichtigung der // angegebenen Eingaben ist gültig $str ='MCMIV'; echo 'Ganzzahlform der römischen Zahl ist ', romanToDecimal($str), '
'; // Dieser Code wurde von ajit beigesteuert ?>> Ausgabe
Integer form of Roman Numeral is 1904>
Komplexitätsanalyse:
- Zeitkomplexität: O(n), wobei n die Länge der Zeichenfolge ist.
Es ist nur eine Durchquerung der Zeichenfolge erforderlich. - Hilfsraum: O(1), da kein zusätzlicher Platz erforderlich ist.