elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Aporte]Convertidor de números decimales a romanos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte]Convertidor de números decimales a romanos  (Leído 3,217 veces)
0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
[Aporte]Convertidor de números decimales a romanos
« en: 24 Mayo 2015, 19:00 pm »

el código es un simple algoritmo recursivo, el limite es de 3999 pero se puede extender haciendo unas modificaciones en el código, esto es así porque con las letras IVXLCDM solo se puede hasta ese valor

Código
  1. #include <stdio.h>
  2.  
  3. char* s = "IVXLCDM";
  4. int n[] = {1,5,10,50,100,500,1000};
  5.  
  6. int aC; //aC es el número a convertir
  7. #define NUM_LIMITE 4000 //aC tiene que ser menor a esta constante
  8.  
  9. void rec(int r){ //algoritmo recursivo, el valor de r lo explico con ejemplos:
  10.                 //si aC = 43 entonces r = 10, si aC = 232 entonces r = 100
  11.                 //si aC = 2132 entonces r = 1000, si aC = 4 entonces r = 1
  12.  
  13.    int b = aC/r; //Toma el digito más significativo de aC, ejemplo: si aC = 234 entonces b = 2
  14.    aC -= b*r;    //trunca aC restando el digito más significativo, si aC = 234 entonces aC = 34
  15.    int p = 0;  
  16.  
  17.    for(int i=0; i < 7;i++)
  18.    if(r==n[i]) p = i;   /*
  19.            p sirve para saber la posición del caracter más indicado para imprimir ejemplos:
  20. cuando r = 1 entonces p = 0 y s[p] = 'I'
  21.                        cuando r = 10 entonces p = 2 y s[p] = 'X'
  22. cuando r = 100 entonces p = 4 y s[p] = 'C'
  23. cuando r = 1000 entonces p = 6 y s[p] = 'M'
  24. */          
  25.  
  26.    //lo siguiente lo comento para r = 1 pero lo mismo pasa con diferentes valores de r
  27.  
  28.    if(b < 4){ //para I II II
  29.        for(int i=0; i < b;i++)
  30.           printf("%c",s[p]);   //s[p] = 'I' lo imprime b veces
  31.    }
  32.  
  33.    else if(b < 6){ //para IV and V
  34.   printf("%c%c",(b==4)?s[p]:' ',s[p+1]); // s[p] = 'I' y s[p+1] = 'V'
  35.    }
  36.  
  37.    else if(b < 9){ //para VI VII VIII
  38.  
  39.   printf("%c",s[p+1]); //s[p+1] = 'V'
  40.  
  41.   for(int i = b-5; i > 0;i--)
  42.       printf("%c",s[p]);      //s[p] = 'I' lo imprime b-5 veces
  43.    }
  44.  
  45.    else{ //para IX
  46. printf("%c%c",s[p],s[p+2]); //s[p] = 'I' y s[p+2] = 'X'
  47.    }
  48.  
  49.    printf(" ");  //esta linea es solo para que el resultado sea más legible :)  
  50.  
  51.    if(r!=1) rec(r/10); //cuando r = 1 entonces se ha evaluado el digito menos significativo de aC
  52.  
  53. }
  54.  
  55. int main(){
  56.  
  57.  printf("Ingresa el numero a convertir: ");
  58.  scanf("%i",&aC);
  59.  
  60.  if( aC < NUM_LIMITE )
  61.      for(int r = 10; ;r*=10)
  62.          if(aC < r){
  63.          rec(r/10);
  64.          break;
  65.      }
  66.  
  67.  getchar();
  68.  return 0;
  69. }
  70.  


ITI


« Última modificación: 24 Mayo 2015, 19:08 pm por 0xFer » En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como convertir numeros decimales a numeros binario en c++?
Programación C/C++
fco_noh 3 9,230 Último mensaje 31 Agosto 2010, 07:38 am
por do-while
Calculadora que suma numeros romanos
Programación C/C++
miiku 1 10,299 Último mensaje 13 Agosto 2012, 03:50 am
por farresito
Numeros Romanos « 1 2 3 »
Programación C/C++
05K4R1N 20 13,515 Último mensaje 11 Junio 2013, 02:33 am
por edr89
verificar numeros romanos « 1 2 »
Programación C/C++
m@o_614 15 10,740 Último mensaje 22 Agosto 2013, 08:46 am
por rir3760
Conversor de números arábigos a números romanos
Programación C/C++
perico1995 0 1,878 Último mensaje 19 Diciembre 2017, 17:54 pm
por perico1995
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines