Autor Tema: Numero Romano en C# convertir de decimal a romano y de romano a decimal  (Leído 12668 veces)

alonsos

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Estoy algo complicado con un ejercicio que estoy realizando.. trata de que el usuario ingrese dos numeros en romano y q se sumen o resten dependiendo de q qiera el usuario  y q el resultado salga en romano

¿Alguien que me pueda ayudar con esto?. Se agradece.
« Última modificación: 01 de Mayo 2016, 17:15 por Alex Rodríguez »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Numero Romano en C# (ayuda)
« Respuesta #1 en: 28 de Abril 2016, 08:02 »
Hola alonsos, lee este hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Para solicitar ayuda, pega el código con el que estés trabajando e indica dónde tienes el problema o no puedes avanzar para poder ayudarte

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Código que permite convertir números romanos a decimales y al revés:

Código: [Seleccionar]
    using System; 
    using System.Text; 
     
    namespace RomanNumerals 
    { 
        static class Roman 
        { 
            static string[] roman1 = { "MMM", "MM", "M" }; 
            static string[] roman2 = { "CM", "DCCC", "DCC", "DC", "D", "CD", "CCC", "CC", "C" }; 
            static string[] roman3 = { "XC", "LXXX", "LXX", "LX", "L", "XL", "XXX", "XX", "X" }; 
            static string[] roman4 = { "IX", "VIII", "VII", "VI", "V", "IV", "III", "II", "I" }; 
     
            public static bool TryParse(string text, out int value) 
            { 
                value = 0; 
                if (String.IsNullOrEmpty(text)) return false; 
                text = text.ToUpper(); 
                int len = 0; 
     
                for (int i = 0; i < 3; i++) 
                { 
                    if (text.StartsWith(roman1[i])) 
                    { 
                        value += 1000 * (3 - i); 
                        len = roman1[i].Length; 
                        break; 
                    } 
                } 
     
                if (len > 0) 
                { 
                    text = text.Substring(len); 
                    len = 0; 
                } 
     
                for (int i = 0; i < 9; i++) 
                { 
                    if (text.StartsWith(roman2[i])) 
                    { 
                        value += 100 * (9 - i); 
                        len = roman2[i].Length; 
                        break; 
                    } 
                } 
     
                if (len > 0) 
                { 
                    text = text.Substring(len); 
                    len = 0; 
                } 
     
                for (int i = 0; i < 9; i++) 
                { 
                    if (text.StartsWith(roman3[i])) 
                    { 
                        value += 10 * (9 - i); 
                        len = roman3[i].Length; 
                        break; 
                    } 
                } 
     
                if (len > 0) 
                { 
                    text = text.Substring(len); 
                    len = 0; 
                } 
     
                for (int i = 0; i < 9; i++) 
                { 
                    if (text.StartsWith(roman4[i])) 
                    { 
                        value += 9 - i; 
                        len = roman4[i].Length; 
                        break; 
                    } 
                } 
     
                if (text.Length > len) 
                { 
                    value = 0; 
                    return false; 
                } 
     
                return true; 
            } 
     
            public static string ToRoman(int num) 
            { 
                if (num > 3999) throw new ArgumentException("Too big - can't exceed 3999"); 
                if (num < 1) throw new ArgumentException("Too small - can't be less than 1"); 
                int thousands, hundreds, tens, units; 
                thousands = num / 1000; 
                num %= 1000; 
                hundreds = num / 100; 
                num %= 100; 
                tens = num / 10; 
                units = num % 10; 
                var sb = new StringBuilder(); 
                if (thousands > 0) sb.Append(roman1[3 - thousands]); 
                if (hundreds > 0) sb.Append(roman2[9 - hundreds]); 
                if (tens > 0) sb.Append(roman3[9 - tens]); 
                if (units > 0) sb.Append(roman4[9 - units]); 
                return sb.ToString(); 
            } 
        }   
     
        class Program 
        { 
            static void Main() 
            { 
                string[] romans = { "I", "MMIV", "DCL", "CCXXII", "IIII", "CZ", "MLXVI", "III", "DCCXIV", "MIM" }; 
                int value = 0; 
     
                foreach (string roman in romans) 
                { 
                    if (Roman.TryParse(roman, out value)) Console.WriteLine("{0} = {1}", roman, value); 
                } 
     
                Console.WriteLine(); 
     
                int[] numbers = { 1, 2004, 650, 222, 4, 99, 1066, 3, 714, 1999, 3999 }; 
     
     
                foreach (int number in numbers) 
                { 
                    Console.WriteLine("{0} = {1}", number, Roman.ToRoman(number)); 
                } 
     
                Console.ReadKey(); 
            } 
             
        } 
    } 

Sólo permite números entre 1 y 3999.

Símbolos permitidos:  I, V, X, L, C, D y M.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".