Перевод чисел из арабской системы счисления в римскую, с помощью рекурсии. - C#

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

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

Здравствуйте помогите, пожалуйста, написать программу, переводящую числа из арабской системы счисления в римскую, с помощью рекурсивного алгоритма. При этом числа пользователь вводит с клавиатуры. Данная программа должна использовать 2 массива: int[] masD = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; string[] masR = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; заранее спасибо
вот нашла похожий вариант программы на Pascal. Осталось только перевести на c sharp
{ Copyright MM Andrew Usachov }
 
Const
 
R: Array[1..13] of String[2] =
 
('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
 
A: Array[1..13] of Integer=
 
(1,4,5,9,10,40,50,90,100,400,500,900,1000);
 
Function Roman(N : Integer) : String;
 
Var Result : String;
 
    i      : Integer;
 
begin
 
 Result := '';
 
 i := 13;
 
 While N >0 do
 
 begin
 
   While A[i] >N do Dec(i);
 
   Result := Result + R[i];
 
   Dec(N, A[i]);
 
 end;
 
 Roman := Result;
 
end;
 
Function Arabic(S : String) : Integer;
 
Var Result : Integer;
 
    i, p   : Integer;
 
begin
 
  Arabic := -1;
 
  Result := 0;
 
  i := 13;
 
  p := 1;
 
  While p <=Length(S) do
 
  begin
 
    While Copy(S, p, Length(R[i])) <>R[i] do
 
    begin
 
      Dec(i);
 
      If i = 0 then Exit;
 
    end;
 
    Result := Result + A[i];
 
    p := p + Length(R[i]);
 
  end;
 
  If Roman(Result) = S then Arabic := Result
 
end;
 
Var N, Err : Integer;
 
    S : String;
 
BEGIN
 
 repeat
 
   ReadLn(S);
 
   If S = '' then Break;
 
   Val(S, N, Err);
 
   If Err = 0 then
 
     WriteLn(Roman(N))
 
   else
 
     WriteLn(Arabic(S));
 
 until false;
 
END.

Решение задачи: «Перевод чисел из арабской системы счисления в римскую, с помощью рекурсии.»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication56
{
    class Program
    {
        static string[] R = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
        static int[] A =    { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 };
 
        public static string Roman(int N)
        {
            string result = "";
            int i;
            i = 12;
            while (N > 0) 
            {
                while (A[i] > N)  
                    i--;
                result += R[i];
                N -= A[i];
            }
            return result;
        }
 
        public static int Arabic(string S)
        {
            int result = 0, i = 12, p = 0;
            while (p < S.Length)
            {
                while (S.Substring(p, R[i].Length) != R[i])
                {
                    i--;
                    if (i == -1)
                        return -1;
                }
                result += A[i];
                p += R[i].Length;
            }
            if (Roman(result) == S) 
                return result;
            return 0;
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine(Roman(21));
            Console.WriteLine(Arabic("XX"));
            Console.ReadKey(true);
        }
    }
}

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


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

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

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