Перевод из арабской в римскую! - C#
Формулировка задачи:
Помогите пожалуйста! Написала программу из римской в арабскую, а наоборот что-то не получается. Нуждаюсь в помощи!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Roman
{
class Program
{
static void Main(string[] args)
{
int[] Roman = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
string[] Arab = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
Console.Write("Введите число в арабской десятичной системе = ");
int n = Convert.ToInt32(Console.ReadLine());
int i = 0;
string s = "";
while (n > 0)
{
if (Roman[i] <= n) // i - элемент массива арабских цифр меньше либо равен числу n то
{
n = n - Roman[i]; // от числа вычитаем его эквивалент в массиве арабском
s = s + Arab[i];
}// в строку записываем его римское значение
else i++;
}
Console.Write("число в римской системи счисления = ");
Console.Write(s);
Console.ReadLine();
}
}
}Решение задачи: «Перевод из арабской в римскую!»
textual
Листинг программы
public class RomanConverter
{
/// <summary>
/// We need some like char-number pair
/// for simple converting
/// </summary>
private readonly Dictionary<int, string> _romanNumeralDict = new Dictionary<int, string>
{
{
1000,
"M"
},
{
900,
"CM"
},
{
500,
"D"
},
{
400,
"CD"
},
{
100,
"C"
},
{
90,
"XC"
},
{
50,
"L"
},
{
40,
"XL"
},
{
10,
"X"
},
{
9,
"IX"
},
{
5,
"V"
},
{
4,
"IV"
},
{
1,
"I"
}
};
public object Convert(int value)
{
return this.ConvertToRomanNumeral(System.Convert.ToInt32(value));
}
public int ConvertBack(object value)
{
return this.ConvertFromRoman(value.ToString());
}
private string ConvertToRomanNumeral(int input)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (int current in this._romanNumeralDict.Keys)
{
while (input >= current)
{
stringBuilder.Append(this._romanNumeralDict[current]);
input -= current;
}
}
return stringBuilder.ToString();
}
private int ConvertFromRoman(string romanNumber)
{
if (romanNumber == null || romanNumber==String.Empty)
throw new ArgumentNullException("romanNumber");
int resultInteger = 0;
romanNumber = romanNumber.ToUpperInvariant();
for (int i = 0; i < romanNumber.Length; i++)
{
switch (romanNumber[i])
{
case 'I':
if (i < romanNumber.Length - 1
&& romanNumber[i + 1] != 'I')
resultInteger--;
else resultInteger++;
break;
case 'X':
if (i < romanNumber.Length - 1
&& (romanNumber[i + 1] == 'L'
|| romanNumber[i + 1] == 'C'))
resultInteger -= 10;
else goto case 'M';
break;
case 'C':
if (i < romanNumber.Length - 1
&& (romanNumber[i + 1] == 'D'
|| romanNumber[i + 1] == 'M'))
resultInteger -= 100;
else
goto case 'M';
break;
case 'L':
case 'V':
case 'D':
case 'M':
resultInteger += _romanNumeralDict.FirstOrDefault(x => x.Value == romanNumber[i].ToString()).Key;
break;
default:
throw new ArgumentException("Wrong Roman number format.");
}
}
return resultInteger;
}
/// <summary>
/// Replace all tabs and spaces
/// </summary>
/// <param name="roman"></param>
/// <returns></returns>
private string ReplaceTab(string roman)
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < roman.Length; i++)
{
char c = roman[i];
if (c != '\n' && c != '\t' && c != '\r')
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString();
}
}