Feedback

Römische Zahlen

Sprache: C#

Mit diesem Snippet lassen sich arabische Zahlen in römische Zahlen umwandeln.
public static string IntToRomanNumber(int number)
{
	StringBuilder result = new StringBuilder();
	int[] digitsValues = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 };
	string[] romanDigits = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
	while (number > 0)
	{
		for (int i = digitsValues.Count() - 1; i >= 0; i--)
			if (number / digitsValues[i] >= 1)
			{
				number -= digitsValues[i];
				result.Append(romanDigits[i]);
				break;
			}
	}
	return result.ToString();
}
public static string IntToRomanNumber(int number)
{
	StringBuilder result = new StringBuilder();
	int[] digitsValues = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 };
	string[] romanDigits = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
	while (number > 0)
	{
		for (int i = digitsValues.Count() - 1; i >= 0; i--)
			if (number / digitsValues[i] >= 1)
			{
				number -= digitsValues[i];
				result.Append(romanDigits[i]);
				break;
			}
	}
	return result.ToString();
}

2 Kommentare

  1. das funktioniert doch nicht oder? muss die 2. Schleife keine „while“ Schleife sein?
    Wenn du die Zahl 20 übergibst dann kommt als Ergebnis XIXI raus

  2. Nicht nachvollziehbar. Hast Du es denn ausprobiert?
    Ich habe mit folgendem Testcode:
    [code]
    Console.WriteLine(IntToRomanNumber(1));
    Console.WriteLine(IntToRomanNumber(4));
    Console.WriteLine(IntToRomanNumber(5));
    Console.WriteLine(IntToRomanNumber(6));
    Console.WriteLine(IntToRomanNumber(9));
    Console.WriteLine(IntToRomanNumber(10));
    Console.WriteLine(IntToRomanNumber(14));
    Console.WriteLine(IntToRomanNumber(19));
    Console.WriteLine(IntToRomanNumber(20));
    Console.WriteLine(IntToRomanNumber(50));
    Console.WriteLine(IntToRomanNumber(69));
    Console.WriteLine(IntToRomanNumber(1976));
    Console.WriteLine(IntToRomanNumber(2018));
    [/code]

    folgenden Output:
    I
    IV
    V
    VI
    IX
    X
    XIV
    XIX
    XX
    L
    LXIX
    MCMLXXVI
    MMXVIII