un numero entero a romano en c++

dreadful
13 de Marzo del 2006
HOLA Q TAL ME ENTERE Q USTEDES TENIAN UN CODIGO FUENTE SOBRE COMO PASDAR UN NUMERO ENTERO A SU EQUIVALENTE ROMANO PODRIAN AYUDAREME GRACIAS

Miguel L.
13 de Marzo del 2006
/* Archivos de cabecera */
#include <stdio.h>
#include <conio.h>
#include <string.h>

/* Los caracteres "c1" y "c2" son inicializados en orden que no afecten a
los "miles". */
char *a2roman (int valor, char *c1, char *c2, char *c3);

int main (void)
{
int numeroArabigo = 1;
int result;
char roman[15] = "";

/* Este ciclo perminte continuar si "numeroArabigo" ar bigo se encuentra
en el rango */
do
{
/* Limpiar la pantalla */
clrscr();

/* Imprimir un mensaje al usuario */
printf ("Ingrese un entero en el rango de 1 a 3000: nt");

/* Leer el valor */
scanf ("%d", &numeroArabigo);
}
while ((numeroArabigo < 1) || (numeroArabigo > 3000));

/* Obtener el valor de los "miles" */
if ((numeroArabigo <= 3000) && (numeroArabigo >= 1000))
{
result = numeroArabigo / 1000;
strcat (roman, a2roman(result, "M", " ", " "));
numeroArabigo -= (result * 1000);
}

/* Obtener el valor de las "centenas" */
if ((numeroArabigo < 1000) && (numeroArabigo >= 100))
{
result = numeroArabigo / 100;
strcat (roman, a2roman(result, "C", "D", "M"));
numeroArabigo -= (result * 100);
}

/* Obtener el valor de las "centenas" */
if ((numeroArabigo < 100) && (numeroArabigo >= 10))
{
result = numeroArabigo / 10;
strcat (roman, a2roman(result, "X", "L", "C"));
numeroArabigo -= (result * 10);
}

/* Obtener el valor de las "unidades" */
if ((numeroArabigo < 10) && (numeroArabigo >= 1))
{
strcat (roman, a2roman(numeroArabigo, "I", "V", "X"));
}

/* Despliegar el n£mero romano */
printf ("El n£mero romano es: nt%snn", roman);
printf ("tt...Presione cualquier tecla para terminar.");
getch();

/* Retorno exitoso */
return 0;
}

char *a2roman (int valor, char *c1, char *c2, char *c3)
{
int i; /* "i" es el ¡ndice de iteraciones */
char rRoman[15] = "";

/* Si "valor" = 1, 2, 3 */
if ((valor >= 1) && (valor <= 3))
{
for (i = 0; i < valor; i++)
strcat (rRoman, c1);
}

/* Si "valor" = 5, 6, 7, 8 */
if ((valor >= 5) && (valor <= 8))
{
strcat (rRoman, c2);

for (i = 0; i < (valor - 5); i++)
strcat (rRoman, c1);
}

/* Si "valor" = 4 */
if (valor == 4)
{
strcat (rRoman, c1);
strcat (rRoman, c2);
}

/* Si "valor" = 9 */
if (valor == 9)
{
strcat (rRoman, c1);
strcat (rRoman, c3);
}

return (rRoman);
}

// ESPERO T SIRVA..RESPONDE..BYE

Noel Solw
13 de Marzo del 2006
// program k1_17.CPP - page 16
// romanic numeration system, range : 0 < num < 4000
// 13/6/2001
// written in Borland CPP ver 3.1

#include <conio.h>
#include <iostream.h>

int GetData()
{
int num;
cout << "decimal number = ";
cin >> num;
return num;
} // GET DATA

void Process(int num)
{
cout << endl << " roman number = ";
switch(num / 1000)
{
case 3 : cout << "M";
case 2 : cout << "M";
case 1 : cout << "M";
} // SWITCH
num %= 1000;
switch(num / 100)
{
case 3 : cout << "C";
case 2 : cout << "C";
case 1 : cout << "C";
break;
case 4 : cout << "C";
case 5 : cout << "D";
break;
case 6 : cout << "DC";
break;
case 7 : cout << "DCC";
break;
case 8 : cout << "DCCC";
break;
case 9 : cout << "CM";
} // SWITCH
num %= 100;
switch(num / 10)
{
case 3 : cout << "X";
case 2 : cout << "X";
case 1 : cout << "X";
break;
case 4 : cout << "X";
case 5 : cout << "L";
break;
case 6 : cout << "LX";
break;
case 7 : cout << "LXX";
break;
case 8 : cout << "LXXX";
break;
case 9 : cout << "XC";
} // SWITCH
num %= 10;
switch(num)
{
case 3 : cout << "I";
case 2 : cout << "I";
case 1 : cout << "I";
break;
case 4 : cout << "I";
case 5 : cout << "V";
break;
case 6 : cout << "VI";
break;
case 7 : cout << "VII";
break;
case 8 : cout << "VIII";
break;
case 9 : cout << "IX";
} // SWITCH
cout << endl << endl;
} // PROCESS

void main()
{
int decimal;
clrscr();
for(;;)
{
decimal = GetData();
if (!decimal)
break;
if ((decimal < 0) || (decimal > 3999))
cout << "out of range" << endl << endl;
else
Process(decimal);
}
cout << endl << "end of program - good bye ! ! ! " << endl;
getch();
} // MAIN


CONTESTA, CERTIFICANDO EL RECIBO DE ESTE E-MAIL