logo

Konvertieren römischer Ziffern in Ganzzahlen

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

Eingang: IX
Ausgabe: 9
Erläuterung: IX ist ein römisches Symbol, das 9 darstellt

Eingang: XL
Ausgabe: 40
Erläuterung: XL ist ein römisches Symbol, das 40 darstellt

Eingang: MCMIV
Ausgabe: 1904
Erläuterung: M ist tausend, CM ist neunhundert und IV ist vier

Empfohlene Übung: Römische Zahl in ganze Zahl umwandeln Probieren Sie es aus!

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>'> beigesteuertJavascript= 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.