Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace Ex_10
- {
- class Program
- {
- static void Main(string[] args)
- {
- /* Парсинг римских чисел*/
- Console.WriteLine("Введите римское число: ");
- string romanNumber = Console.ReadLine();
- // Избавляем число от лишних пробелов и отступов.
- string formattedRomanNumber = romanNumber.Trim();
- // Для удобства ввода пользователя(прим. программа съест xv как XV).
- formattedRomanNumber = formattedRomanNumber.ToUpper();
- Console.WriteLine($"Римское число {formattedRomanNumber} равно арабскому числу {RomanParse(formattedRomanNumber)}");
- }
- private static Dictionary<char,int> romanMap = new Dictionary<char, int>
- {
- {'I', 1 },
- {'V', 5 },
- {'X', 10 },
- {'L', 50 },
- {'C', 100 },
- {'D', 500 },
- {'M', 1000 }
- };
- static int RomanParse(string number)
- {
- // Возвращаем исключение при пустой строке.
- if (string.IsNullOrWhiteSpace(number))
- {
- Console.WriteLine("Empty String!");
- return 0;
- }
- // Непосредственно основное тело метода.
- else
- {
- // Обнуляем переменную результата для корректных арифметических действий с ней.
- int result = 0;
- // Бежим по строке, обрабатывая по паре символов
- for (int i = 0; i < number.Length; i++)
- {
- // Условие, необходимое для того, чтобы понять вычитать или прибавлять число к результату.
- // Если мы находимся в границах строки, и метод IsSubtractive возвращает true, мы отнимаем от результата число.
- if (i + 1 < number.Length && IsSubtractive(number[i], number[i + 1]))
- {
- result -= romanMap[number[i]];
- }
- // Иначе естественно прибавляем.
- else
- result += romanMap[number[i]];
- }
- return result;
- }
- }
- // Метод, который возвращает true, если первый символ меньше второго символа, по romanMap Dictionary.
- private static bool IsSubtractive(char c1, char c2)
- {
- return romanMap[c1] < romanMap[c2];
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment