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]);          
          }          
      }          
    }
}

10 comentarios:

Unknown dijo...

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

Anónimo dijo...

buena solucion :)

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown 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;

Unknown dijo...

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

Unknown 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.

Micro y Macro Economia dijo...

Genial

Cesaropapu dijo...

si quiero agregarle millares, que deberia hacer?
lo dejo por si me corrige alguien

Scanner scan = 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"};
String Millares[] = {"", "M", "MC", "MCC", "MCCC", "MCD", "MD", "MDC", "MDCC", "MDCCC", "MCM",};
System.out.println("Ingresa numero entre 1 y 999");

int N = scan.nextInt();

int u = N % 10;
int d = (N / 10) % 10;
int c = N / 100;
int m = N / 1000;
if (N >= 1000) {
System.out.println(Millares[m] + Centena[c] + Decena[d] + Unidad[u]);
} else {
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]);
}
}
}
}
}

Publicar un comentario