C# :: Aufgabe #30 :: Lösung #3
8 Lösungen

#30
Zahlen in Römischer Schreibweise
Anfänger - C#
von pocki
- 29.12.2012 um 19:40 Uhr
Schreibe eine Programm welches eine Ganzzahl einliest und diese anschließend in römischer Schreibweise wieder ausgibt und umgekehrt bei einer eingegebenen Zahl in römischer Schreibweise diese als normale Zahl wieder ausgibt:
Die Erkennung der Schreibweise sollte automatisch funktionieren.
Konsolenausgabe:
Geben Sie eine Zahl ein: 1234
entspricht: MCCXXXIV
Geben Sie eine Zahl ein: DXXXVII
entspricht: 537
Die Erkennung der Schreibweise sollte automatisch funktionieren.
#3

von Mexx (2370 Punkte)
- 07.11.2014 um 14:31 Uhr

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace RömischeZahlen { class Program { static void Main(string[] args) { while (true) { Console.WriteLine("Geben Sie eine Zahl ein"); string input = Console.ReadLine().Trim(); int dec; if (int.TryParse(input, out dec)) Console.WriteLine("\nentspricht: " + UmrechnenRömisch(dec)); else { dec = UmrechnenDezimal(input.ToUpper()); if (dec > 0) Console.WriteLine("\nentspricht: " + dec); else Console.WriteLine("\nFehler: Haben Sie eine korrekte römische Zahl kleiner 4000 eingegeben?"); } Console.WriteLine(); } } private static string UmrechnenRömisch(int dec) { if (dec > 3999) return "Die übergebene Zahl war zu groß \nMaximale Zahlengröße ist 3999 \n"; Zahlen römZahl = new Zahlen(); string zahl = string.Empty; try { while (dec > 0) { if (dec >= 1000) { zahl += römZahl.tausend; dec -= 1000; continue; } if (dec >= 900) { zahl += römZahl.hundert; zahl += römZahl.tausend; dec -= 900; continue; } if (dec >= 500) { zahl += römZahl.fünfhundert; dec -= 500; continue; } if (dec >= 400) { zahl += römZahl.hundert; zahl += römZahl.fünfhundert; dec -= 400; continue; } if (dec >= 100) { zahl += römZahl.hundert; dec -= 100; continue; } if (dec >= 90) { zahl += römZahl.zehn; zahl += römZahl.hundert; dec -= 90; continue; } if (dec >= 50) { zahl += römZahl.fünfzig; dec -= 50; continue; } if (dec >= 40) { zahl += römZahl.zehn; zahl += römZahl.fünfzig; dec -= 40; continue; } if (dec >= 10) { zahl += römZahl.zehn; dec -= 10; continue; } if (dec >= 9) { zahl += römZahl.eins; zahl += römZahl.zehn; dec -= 9; continue; } if (dec >= 5) { zahl += römZahl.fünf; dec -= 5; continue; } if (dec >= 4) { zahl += römZahl.eins; zahl += römZahl.fünf; dec -= 4; continue; } if (dec >= 1) { zahl += römZahl.eins; dec -= 1; continue; } } } catch { return "Fehler: Haben Sie eine Korrekte Dezimalzahl übergeben?"; } return zahl; } private static int UmrechnenDezimal(string röm) { Regex rex = new Regex("^[CDILMVX]+$"); if (!rex.IsMatch(röm)) return 0; int zahl = 0; Zahlen intZahl = new Zahlen(); int temp, temp2; try { for (int i = 0; i < röm.Length; i++) { intZahl.zahl.TryGetValue(röm[i], out temp); if (i < röm.Length - 1) intZahl.zahl.TryGetValue(röm[i + 1], out temp2); else temp2 = 0; if (temp < temp2) { zahl += temp2 - temp; i++; } else zahl += temp; } } catch { return 0; } return zahl; } class Zahlen { public Dictionary<char, int> zahl; public Zahlen() { zahl = new Dictionary<char, int>(); zahl.Add('I', 1); zahl.Add('V', 5); zahl.Add('X', 10); zahl.Add('L', 50); zahl.Add('C', 100); zahl.Add('D', 500); zahl.Add('M', 1000); } public string eins = "I"; public string fünf = "V"; public string zehn = "X"; public string fünfzig = "L"; public string hundert = "C"; public string fünfhundert = "D"; public string tausend = "M"; } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1