Перевод чисел из арабской системы счисления в римскую, с помощью рекурсии. - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д