Перевод римских чисел в арабские - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Вот такое у меня небольшое задание:
Перед вами стоит задача конвертации числа из римской системы счисления в десятичную. Все числа в рамках вашего проекта можно записать с помощью 7 цифр: I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 Натуральные числа записываются при помощи повторения этих цифр. При этом, если большая цифра стоит перед меньшей, либо равной, то они складываются, если же меньшая — перед большей, то меньшая вычитается из большей. Входные данные. В первой строке написано число N(1<=N<=100) – количество римских чисел, которые нужно конвертировать. В последующих N строках записаны сами римские числа, по одной в каждой строке. Выходные данные. Необходимо вывести N чисел в десятичной системе счисления, которые являются результатом конвертации входных римских чисел. Порядок следования десятичных чисел должен соответствовать порядку следования соответствующих римских чисел. Гарантируется, что конвертированное число находится в интервале [1,1000]
При вводе одного римского числа пользователем всё работало прекрасно. Но когда я попытался ввести цикл для нескольких чисел, перестал работать ToCharArray.
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));
            }
        }
    }
}

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


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

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

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