Перевод из арабской в римскую! - 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();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.429 из 5
Похожие ответы