Программирвание, разработка бизнес процессов и сайтов // © Rabusov Online Service. 2004 // Рабусов С.В.
Живые и Твёрдые Издательский Дом Коммерсантъ
Аудиокниги // AudioBooks

Перевод целого числа в римскую систему счисления и обратно (пример на C#)



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Arab2Roman
{
    public class sMath
    {
        public static string[] Rims = new string [] { "M","CM","D", "CD", "C", "XC","L","XL","X","IX","V","IV","I"," "};
        public static int[] Arab = new int[]        {1000, 900, 500, 400, 100, 90,  50,  40,  10,  9,  5,   4,  1,  0};
        private static readonly int MaxVariant = Rims.Length;
        sMath()
        {
            
        }
        /*********************************************************
        {Источник: "Наука и жизнь" N12 1986  cтр. 95 }
        {Алгоритм: В. Птицын г.Москва }
         Исходный алгоритм на Delphi (Pascal)
        **********************************************************/
        public static string Arab2Rim(int N)
        {
            string S = "";
            int I = 0;
            while (N > 0) {
              while (Arab[I]<=N) {
                S += Rims[I];
                N -= Arab[I];
              }
              I++;
            }
            return S;
        }
        public static int Rim2Arab (string S)
        {
            int I=0, N=0;
            string s0 = S;
  
            while ( (S.Length != 0) && (I < MaxVariant) )
            {
                while (Rims[I] == S.Substring(0, (Rims[I].Length > S.Length ? S.Length : Rims[I].Length)).ToUpper())
                {
                      S = S.Substring(0+Rims[I].Length); 
                      N += Arab[I];
                }
                I++;
            }
            return N;
        }
    }
}
 

Пример кода.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Arab2Roman
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button_A2R_Click(object sender, EventArgs e)
        {
            textBox_R.Text = sMath.Arab2Rim(Convert.ToInt32(textBox_A.Text));
        }

        private void button_R2A_Click(object sender, EventArgs e)
        {
            textBox_A.Text = Convert.ToString( sMath.Rim2Arab(textBox_R.Text));
        }
    }
}
Рейтинг@Mail.ru Фотограф Фотограф Рабусов С.В. ссср