Colabora |
Números arábigos a romanos
Fecha: 29/Dic/2007 (28-12-07)
|
IntroducciónSaludos, espero que todos gocen de buena salud.
Espero que sea de utilidad para alguien, y si no, al menos ahí va mi primera colaboración después de tanto tiempo de usar los recursos del sitio. (Así el Guille no me regaña cada vez que hago un download, son bromas, realmente espero que alguien le pueda dar uso).
ContenidoEsta clase no tiene nada espectacular, como podrás observar, se trata tan sólo de una matriz que contiene ciertos números romanos representativos, y que durante el proceso de "traducción" se combinan para obtener el resultado final. Hasta el momento sólo analiza enteros de cinco cifras (cómo les decía sólo trabaja en un rango de 1 a 99999). El proceso inicia analizando la cifra natural de izquierda a derecha y el resultado obtenido de cada digito natural lo traduce a su análogo en numeración romana y lo concatena al resultado del digito anteriormente analizado, hasta finalizar con el último digito de la derecha de la cifra completa. (jeje, que enredo) Por ejemplo: 1005 1 = M (al ser una cifra de cuatro digitos, el primer número a la izquierda representa miles y el número mil se representa con una M en la numeración romana). 0 = No tiene representación 0 = No tiene representación 5 = V (Al ser el último digito de la cifra éste obviamente es unidades y cinco se representa con V) El resultado de 1005 traducido a números romanos sería MV.
Jeje, disculpen si no explico muy bien. Pero basta con copiar el código y pegarlo, para que lo veas en acción.
Nota:
El código:Después de tanto enredo aquí les va el código de la clase... public class naturalRomanos { #region Atributos private string[] _romanos = new string[50]; #endregion #region Contructores public naturalRomanos() { InicializarMatriz(); } #endregion #region Métodos públicos public string Convertir(int pNumero) { string _letras = ""; switch (pNumero.ToString().Length) { case 1: _letras += ConvierteUno(pNumero.ToString()); break; case 2: _letras += ConvierteDos(pNumero.ToString()); break; case 3: _letras += ConvierteTres(pNumero.ToString()); break; case 4: _letras += ConvierteCuatro(pNumero.ToString()); break; case 5: _letras += ConvierteCinco(pNumero.ToString()); break; } return _letras; } #endregion #region Métodos privados private string ConvierteUno(string pNumero) { return _romanos[int.Parse(pNumero)]; } private string ConvierteDos(string pNumero) { //Obtiene el primer número string _letras = ""; string _numero = pNumero.ToString().Substring(0, 1); string _temp = ""; if (int.Parse(_numero) > 0) { _letras = _romanos[int.Parse(_numero) + 9]; } _temp = ConvierteUno(pNumero.ToString().Substring(1, 1)); return _letras + _temp; } private string ConvierteTres(string pNumero) { string _letras = ""; string _temp = ""; if (int.Parse(pNumero.ToString().Substring(0, 1)) > 0) { _letras += _romanos[int.Parse(pNumero.ToString().Substring(0, 1)) + 18]; } _temp = ConvierteDos(pNumero.ToString().Substring(1, 2)); return _letras + _temp; } private string ConvierteCuatro(string pNumero) { string _letras = ""; string _temp = ""; if (int.Parse(pNumero.ToString().Substring(0, 1)) > 0) { _letras += _romanos[int.Parse(pNumero.ToString().Substring(0, 1)) + 27]; } _temp += ConvierteTres(pNumero.Substring(1, 3)); return _letras + _temp; } private string ConvierteCinco(string pNumero) { string _letras = ""; string _temp = ""; _letras += _romanos[int.Parse(pNumero.ToString().Substring(0, 1)) + 36]; _temp += ConvierteCuatro(pNumero.Substring(1, 4)); return _letras + _temp; } private void InicializarMatriz() { //Ahora con los números _romanoss _romanos[0] = ""; _romanos[1] = "I"; _romanos[2] = "II"; _romanos[3] = "III"; _romanos[4] = "IV"; _romanos[5] = "V"; _romanos[6] = "VI"; _romanos[7] = "VII"; _romanos[8] = "VIII"; _romanos[9] = "IX"; _romanos[10] = "X"; _romanos[11] = "XX"; _romanos[12] = "XXX"; _romanos[13] = "XL"; _romanos[14] = "L"; _romanos[15] = "LX"; _romanos[16] = "LXX"; _romanos[17] = "LXXX"; _romanos[18] = "XC"; _romanos[19] = "C"; _romanos[20] = "CC"; _romanos[21] = "CCC"; _romanos[22] = "CD"; _romanos[23] = "D"; _romanos[24] = "DC"; _romanos[25] = "DCC"; _romanos[26] = "DCCC"; _romanos[27] = "CM"; _romanos[28] = "M"; _romanos[29] = "MM"; _romanos[30] = "MMM"; _romanos[31] = "M(V)"; _romanos[32] = "(V)"; _romanos[33] = "(V)M"; _romanos[34] = "(V)MM"; _romanos[35] = "(V)MMM"; _romanos[36] = "M(X)"; _romanos[37] = "(X)"; _romanos[38] = "(XX)"; _romanos[39] = "(XXX)"; _romanos[40] = "(XL)"; _romanos[41] = "(L)"; _romanos[42] = "(LX)"; _romanos[43] = "(LXX)"; _romanos[44] = "(LXXX)"; _romanos[45] = "(XC)"; } #endregion }
Espero le sea de provecho.
Espacios de nombres usados en el código de este artículo:System
|
Lo comentado en este artículo está probado (y funciona) con la siguiente configuración:
El autor se compromete personalmente de que lo expuesto en este artículo es cierto y lo ha comprobado usando la configuración indicada anteriormente.
En cualquier caso, el Guille no se responsabiliza del contenido de este artículo.
Si encuentras alguna errata o fallo en algún link (enlace), por favor comunícalo usando este link:
Gracias.