Pages

lunes, 21 de enero de 2013

Convertir a números romanos entre 1 y 999 Codigo Fuente en Java

Problema
Determinar un algoritmo que permita convertir un número arábigo  comprendido entre  1 y 999 a números romanos

Solución

  • Entrada: 697
  • Salida:  DCXCVII
Codigo Fuente en Java
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
      Scanner sc=new Scanner(System.in);
      String Unidad[]={"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
      String Decena[]={"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
      String Centena[]={"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
      System.out.println("Ingresa numero entre 1 y 999");
      int N = sc.nextInt();
      int u=N%10;
      int d=(N/10)%10;
      int c=N/100;
      if(N>=100){         
          System.out.println(Centena[c]+Decena[d]+Unidad[u]);
      }else{
          if(N>=10){
              System.out.println(Decena[d]+Unidad[u]);          
          }else{
              System.out.println(Unidad[N]);          
          }          
      }          
    }
}

8 comentarios:

eduin bolivar dijo...

coño te la comiste pana muy buena solución

Anónimo dijo...

buena solucion :)

Eliseo Reyes dijo...
Este comentario ha sido eliminado por el autor.
Eliseo Reyes dijo...

Buena solucion, aqui le he llevado a PLSQL por si a alguien le intereza,,

CREATE OR replace FUNCTION Convertir_a_romano(p_numero NUMBER)
RETURN VARCHAR2
IS
TYPE ty_datos_romano IS varray(10) OF VARCHAR2(50);

t_unidad TY_DATOS_ROMANO := Ty_datos_romano('', 'I', 'II', 'III', 'IV', 'V','VI', 'VII', 'VIII', 'IX');
t_decena TY_DATOS_ROMANO := Ty_datos_romano('', 'X', 'XX', 'XXX', 'XL', 'L','LX', 'LXX', 'LXXX', 'XC');
t_centena TY_DATOS_ROMANO := Ty_datos_romano('', 'C', 'CC', 'CCC', 'CD', 'D','DC', 'DCC', 'DCCC', 'CM');

unidad NUMBER;
decena NUMBER;
centena NUMBER;
numero_en_romano VARCHAR2(300);

BEGIN
unidad := MOD(p_numero, 10) + 1;
decena := MOD((p_numero/10), 10) + 1;
centena := ( p_numero / 100 ) + 1;

IF ( p_numero >= 100 ) THEN
numero_en_romano := T_centena(centena)||T_decena(decena)||T_unidad(unidad);
ELSE
IF ( p_numero >= 10 ) THEN
numero_en_romano := T_decena(decena)||T_unidad(unidad);
ELSE
numero_en_romano := T_unidad(unidad);
END IF;
END IF;

RETURN numero_en_romano;

END convertir_a_romano;

James Shawn Spencer Delherbe dijo...

y como lo puedo hacer alrevez ingresa un numero romano y debe salir entero?

Pablo Bravo dijo...

buenos dias quisiera saber cual es el codigo html para poder hacerle correr en una plataforma workbench

Anónimo dijo...

Hola amigos muy buena solución, le agrege algo al código para corregir un problemita..
unidad := trunc(MOD(p_numero, 10) + 1);
decena := trunc(MOD((p_numero/10), 10) + 1);
centena := trunc(( p_numero / 100 ) + 1);
le agregue la function TRUNC para evitar que me redondiara el numero, esto hacia que en ocasiones la funcion no devolviera el número ROMANO correcto ejemplo si la corres pasandole el numero 25 le devuelve XXXV lo que esta mal... con este pequeño arreglo solucionado... saludos y nuevamente gracias.

Anónimo dijo...

hola ayudenme porfa: Ingrese número entre 1 y 99, luego visualice su equivalente en romanos.

Publicar un comentario en la entrada