Перевод из арабской в римскую! - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д