viernes, 7 de noviembre de 2008

Convertir a numeros romanos en C

//4.33.c
//convierte numeros decimales a romanos del rango de 1 a 1000
#include
main ()
{
int n, a, b, c, d;

printf("PROGRAMA QUE CONVIERTE NUMEROS DECIMALES A ROMANOS \n\nProporciona el numero a convertir:\n");
scanf ("%d", & n);
printf ("Equivalente:\n");
d = n%10;
n = n/10;
c = n%10;
n = n/10;
b = n%10;
a = n/10;

switch (a){

case 1: printf ("M"); break;
case 2: printf ("MM"); break;
case 3: printf ("MMM"); break;

default: break;
}
switch (b){

case 1: printf ("C"); break;
case 2: printf ("CC"); break;
case 3: printf ("CCC"); break;
case 4: printf ("CD"); break;
case 5: printf ("D"); break;
case 6: printf ("DC"); break;
case 7: printf ("DCC"); break;
case 8: printf ("DCCC"); break;
case 9: printf ("CM"); break;

default: break;
}

switch (c){

case 1: printf ("X"); break;
case 2: printf ("XX"); break;
case 3: printf ("XXX"); break;
case 4: printf ("XL"); break;
case 5: printf ("L"); break;
case 6: printf ("LX"); break;
case 7: printf ("LXX"); break;
case 8: printf ("LXXX"); break;
case 9: printf ("XC"); break;

default: break;
}

switch (d) {

case 1: printf ("I"); break;
case 2: printf ("II"); break;
case 3: printf ("III"); break;
case 4: printf ("IV"); break;
case 5: printf ("V"); break;
case 6: printf ("VI"); break;
case 7: printf ("VII"); break;
case 8: printf ("VIII"); break;
case 9: printf ("IX"); break;

default: break;
}
getch ();
return 0;
}

3 comentarios:

Anónimo dijo...

Bueno el aporte érp creo que mas efectivo es este.
void cambiarRom(int digito, char v1,char v2,char v3);

int main()
{
int n,r,digito;
do{
system("cls");
printf("Deme el numero ");
scanf("%d",&n);
}while(n<=0 || n>3000);

printf("\nEl numero %d en ROMANOS es ",n);
r=n;
digito=r/1000;
r=r%1000;
cambiarRom(digito,'M',' ',' ');
digito=r/100;
r=r%100;
cambiarRom(digito,'C','D','M');
digito=r/10;
r=r%10;
cambiarRom(digito,'X','L','C');
digito=r;
cambiarRom(digito,'I','V','X');

printf("\n\n");
system("PAUSE");
return (0);
}

void cambiarRom(int digito, char v1,char v2,char v3)
{
int j;

if(digito==9){
printf("%c%c",v1,v3);
}
else{
if(digito>4){
printf("%c",v2);
for(j=1;j<=digito-5;j++){
printf("%c",v1);
}
}
else{
if(digito==4){
printf("%c%c",v1,v2);
}
else{
for(j=1;j<=digito;j++){
printf("%c",v1);
}
}
}
}
}

Anónimo dijo...

#include
#include
#include
main(){
char centero[10];
int entero;
void romanos(int);
printf("Introduce el numero en arabigo\n");
scanf("%s",centero);
entero=atoi(centero);
printf("%d",entero);
romanos(entero);
}
void romanos(int entero){
char *millares[]={"","M","MM","MMM"};
char *centenas[]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char *decenas[]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char *unidades[]={"","I","II","III","IV","V","VI","VII","VIII","IX"};

int m,aux,c,aux2,d,u;

m=entero/1000; /*millares*/
aux=entero%1000;
c=aux/100; /*centenas*/
aux2=aux%100;
d=aux2/10; /*decenas*/
u=aux2%10; /*unidades*/

printf("\nEl numero %d en romano es %s%s%s%s\n\n",entero,millares[m],centenas[c],decenas[d],unidades[u]);
}

Anónimo dijo...

emmm Asi es como era lol

main(){
char centero[10];
int entero;
void romanos(int);
printf("Introduce el numero en arabigo\n");
scanf("%s",centero);
entero=atoi(centero);

romanos(entero);
}
void romanos(int entero){
char *millares[]={"","M","MM","MMM"};
char *centenas[]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char *decenas[]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char *unidades[]={"","I","II","III","IV","V","VI","VII","VIII","IX"};

int m,aux,c,aux2,d,u;

m=entero/1000; /*millares*/
aux=entero%1000;
c=aux/100; /*centenas*/
aux2=aux%100;
d=aux2/10; /*decenas*/
u=aux2%10; /*unidades*/

printf("\nEl numero %d en romano es %s%s%s%s\n\n",entero,millares[m],centenas[c],decenas[d],unidades[u]);
}