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
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]); } } } }
11 comentarios:
coño te la comiste pana muy buena solución
buena solucion :)
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;
y como lo puedo hacer alrevez ingresa un numero romano y debe salir entero?
buenos dias quisiera saber cual es el codigo html para poder hacerle correr en una plataforma workbench
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.
hola ayudenme porfa: Ingrese número entre 1 y 99, luego visualice su equivalente en romanos.
Genial
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]);
}
}
}
}
}
frikis
Publicar un comentario