Перевод римских чисел в арабские - C#
Формулировка задачи:
Добрый вечер. Вот такое у меня небольшое задание:
При вводе одного римского числа пользователем всё работало прекрасно. Но когда я попытался ввести цикл для нескольких чисел, перестал работать ToCharArray.
Перед вами стоит задача конвертации числа из римской системы счисления в десятичную.
Все числа в рамках вашего проекта можно записать с помощью 7 цифр:
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
Натуральные числа записываются при помощи повторения этих цифр. При этом, если большая цифра стоит перед меньшей, либо равной, то они складываются, если же меньшая — перед большей, то меньшая вычитается из большей.
Входные данные.
В первой строке написано число N(1<=N<=100) – количество римских чисел, которые нужно конвертировать. В последующих N строках записаны сами римские числа, по одной в каждой строке.
Выходные данные.
Необходимо вывести N чисел в десятичной системе счисления, которые являются результатом конвертации входных римских чисел. Порядок следования десятичных чисел должен соответствовать порядку следования соответствующих римских чисел. Гарантируется, что конвертированное число находится в интервале [1,1000]
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace roman_numbers { class Program { static void Main(string[] args) { int N = Convert.ToInt32(File.ReadLines("input.txt").Skip(0).First()); string[] Roman = new string[N]; for (int i = 0; i < N; i++) { Roman[i] = File.ReadLines("input.txt").Skip(i + 1).First(); char[] ch = new char[Roman[i].Length]; ch = Roman[i].ToCharArray; int[] Znach = new int[Roman[i].Length]; int[] Arab = new int[N]; for (int j = 0; j < ch.Length; j++) { Arab[i] = 0; if (ch[j] == 'I') { Znach[j] = 1; } if (ch[j] == 'V') { Znach[j] = 5; } if (ch[j] == 'X') { Znach[j] = 10; } if (ch[j] == 'L') { Znach[j] = 50; } if (ch[j] == 'C') { Znach[j] = 100; } if (ch[j] == 'D') { Znach[j] = 500; } if (ch[j] == 'M') { Znach[j] = 1000; } Arab[i] = Arab[i] + Znach[j]; } for (int j = 0; j < ch.Length - 1; j++) { if (Znach[j] < Znach[j + 1]) { Arab[i] = Arab[i] - 2 * Znach[j]; } } StreamWriter str = new StreamWriter("output.txt"); for (int k = 0; k < N; k++) { str.WriteLine(Arab[i]); } str.Close(); } } } }
Решение задачи: «Перевод римских чисел в арабские»
textual
Листинг программы
using System; using System.Collections.Generic; namespace RomanNumeralsTest { public static class RomanNumerals { private static readonly Dictionary<char, int> romanDigits = new Dictionary<char, int> { { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } }; public static int Decode(string s) { int total = 0; int prev = 0; foreach( char c in s ) { int curr = romanDigits[c]; total += curr < prev ? -curr : curr; prev = curr; } return total; } } class Program { static void Main(string[] args) { foreach( string s in args ) { Console.WriteLine(RomanNumerals.Decode(s)); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д