Givet en sträng i romersk form, är uppgiften att konvertera denna givna romerska sträng till ett heltal.
romerska siffror baseras på följande symboler:
Symbol | Värde |
|---|---|
jag css understruken text | 1 |
I | 5 |
X xor i java | 10 |
L | femtio snabb sortering java |
C | 100 |
D | 500 reactjs karta |
M | 1000 |
Exempel:
Rekommenderad övning romersk tal till heltal Prova det!Inmatning: IX
Produktion: 9
Förklaring: IX är en romersk symbol som representerar 9Inmatning: XL
Produktion: 40
Förklaring: XL är en romersk symbol som representerar 40Inmatning: MCMIV
Produktion: 1904
Förklaring: M är tusen, CM är niohundra och IV är fyra
Närma sig: Ett nummer i romerska siffror är en sträng av dessa symboler skrivna i fallande ordning (t.ex. M:s först, följt av D:s, etc.). Men i några specifika fall, för att undvika att fyra tecken upprepas i följd (som IIII eller XXXX), subtraktiv notation används ofta enligt följande:
- jag placerad innan I eller X indikerar en mindre, så fyra är IV (en mindre än 5) och 9 är IX (en mindre än 10).
- X placerad innan L eller C indikerar tio mindre, så fyrtio är XL (10 mindre än 50) och 90 är XC (tio mindre än hundra).
- C placerad innan D eller M indikerar hundra mindre, så fyrahundra är CD (hundra mindre än femhundra) och niohundra är CENTIMETER (hundra mindre än tusen).
Algoritm för att konvertera romerska siffror till heltal:
hur man konverterar int till sträng java
- Dela upp den romerska siffersträngen i romerska symboler (tecken).
- Konvertera varje symbol med romerska siffror till det värde den representerar.
- Ta symbolen en efter en från att börja från index 0:
- Om det aktuella värdet på symbolen är större än eller lika med värdet på nästa symbol, lägg till detta värde till den löpande summan.
- annars subtrahera detta värde genom att lägga till värdet av nästa symbol till den löpande summan.
Följande är implementeringen av ovanstående algoritm:
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) { // Värdet på nuvarande symbol // är större eller lika med // nästa symbol res = res + s1; } else { // Värdet på nuvarande symbol är // mindre än nästa symbol res = res + s2 - s1; i++; } } annat { res = res + s1; } } returnera res; } // Drivrutinskod int main() { // Med tanke på indata är giltig sträng 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) { // Värdet på nuvarande symbol // är större eller lika med // nästa symbol res = res + s1; } else { // Värdet på nuvarande symbol är // mindre än nästa symbol res = res + s2 - s1; i++; } } annat { res = res + s1; } } returnera res; } // Drivrutinskod int main() { // Med tanke på indata är giltiga char str[10] = 'MCMIV'; printf('Heltalsform av romersk siffra är %d',romanToDecimal(str)); returnera 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) { // Värdet på nuvarande symbol // är större eller lika med // nästa symbol res = res + s1; } else { // Värdet på nuvarande symbol är // mindre än nästa symbol res = res + s2 - s1; i++; } } annat { res = res + s1; } } returnera res; } // Driver Code public static void main(String args[]) { RomanToNumber ob = new RomanToNumber(); // Med tanke på att indata är giltiga String str = 'MCMIV'; System.out.println('Heltalsform av romersk siffra' + ' är ' + ob.romanToDecimal(str)); } }> Pytonorm # 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): # Värdet på nuvarande symbol är större # eller lika med nästa symbol res = res + s1 i = i + 1 annat: # Värdet på nuvarande symbol är större # eller lika med nästa symbol res = res + s2 - s1 i = i + 2 annat: res = res + s1 i = i + 1 retur res # Driver code print('Heltalsform av romersk siffra är'), print(romanToDecimal('MCMIV'))>'>C#= s2) { // Värdet på nuvarande symbol är större // eller lika med nästa symbol res = res + s1; } annat { res = res + s2 - s1; i++; // Värdet på nuvarande symbol är // mindre än nästa symbol } } else { res = res + s1; i++; } } returnera res; } // Driver Code public static void Main(string[] args) { GFG ob = new GFG(); // Med tanke på indata som ges är giltig sträng str = 'MCMIV'; Console.WriteLine('Heltalsform av romersk siffra' + ' är ' + ob.romanToDecimal(str)); } } // Denna kod är bidragit från 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) { // Värdet på nuvarande symbol // är större eller lika med // nästa symbol $res = $res + $s1; } annat { $res = $res + $s2 - $s1; $i++; // Värdet på nuvarande symbol är // mindre än nästa symbol } } else { $res = $res + $s1; $i++; } } returnera $res; } // Drivrutinskod // Med tanke på indata // givna är giltiga $str ='MCMIV'; echo 'Heltalsform av romerska siffror är ', romanToDecimal($str), '
'; // Denna kod bidrar med ajit ?>> Produktion
Integer form of Roman Numeral is 1904>
Komplexitetsanalys:
- Tidskomplexitet: O(n), där n är längden på strängen.
Endast en korsning av strängen krävs. - Hjälputrymme: O(1), Eftersom inget extra utrymme krävs.