No necesito una explicacion, Solo el codigo que pida un numero en romano y arroje su resultado, ejemplo
XXI == 21.
Si veo el codigo comprendere bien como se hace...
PD: quisiera el codigo usando cout, cin, gets(), me facilitan mas ya que yo trabajo mas facil las variables de esa forma, si no es mucha molestia
Copyright © 2024 Q2A.ES - All rights reserved.
Answers & Comments
Verified answer
Hola:
fijate si te sirve
#include <stdio.h>
#include <stdlib.h>
int main()
{
char rom;
int num=0,aux=0,ant=0,dex;
printf ("USE SOLO LETRAS MAYUSCULAS\nIntroduzca el numero romano: "");
while(rom!='\n')
{
rom=getchar();
dex=aux-num;
switch(rom)
{
case 'I':num=1;break;
case 'V':num=5;break;
case 'X':num=10;break;
case 'L':num=50;break;
case 'C':num=100;break;
case 'D':num=500;break;
case 'M':num=1000;break;
}if (rom=='\n')
printf("");
else
if (dex>ant && ant<num)
aux=dex+(num-ant);
else if (aux==0)
{
ant=num;
aux+=num;
}
else
if (aux)
{if(num<=ant)
{
aux+=num;
ant=num;
}
else if (num>ant)
{
aux=(num-ant);
ant=num;
}
}
}
printf("El numero en forma decimal es %d",aux);
getchar();
}
saludos
Antonio
El problema es mucho más complejo de lo que parece. Hace poco resolví este mismo problema en LeetCode y la solución más simple y eficiente que vi entre las respuestas enviadas fue esta:
https://discuss.leetcode.com/topic/7784/clean-o-n-...
Usa un ENUM y un for que vaya desde el fin hasta el inicio y que pregunte si el numero que esta despues es menor (sumo) sino resto etc..
#include <stdio.h>
#include <conio.h>
void main()
{
char op;
clrscr();
printf("Introduzca el numero romano que quiera convertir a arabigos");
scanf("%c"&op);
switch(op)
{
case 'I' : printf("1");
breack;
case 'V' : printf("5");
breack;
case 'X' : printf("10");
breack;
case 'L' : printf("50");
breack;
case 'C' : printf("100");
breack;
case 'M' : printf("1000");
breack;
}
getch();
}