fork download
  1. #include <iostream>
  2. #define MAXLETTERE 7
  3.  
  4. using namespace std;
  5.  
  6. int posizioneLettera(char[], char);
  7.  
  8. int main() {
  9. char lettere[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'}; // Le sette lettere
  10. int valori[] = {1000, 500, 100, 50, 10, 5, 1}; // I valori di ogni lettera
  11. int risultato = 0;
  12. int cifra;
  13. char romano[255];
  14. int contaromano = 0;
  15.  
  16. do {
  17. cin >> cifra;
  18. } while(cifra < 0 || cifra > 4999); // Numero massimo rappresentabile con le M.
  19.  
  20. // ** SUPREMO CICLO DI CONVERSIONE **
  21. for (int i = 0; i < MAXLETTERE; i++) {
  22. risultato = cifra / valori[i]; // risultato = 1678 / 1000
  23. cifra = cifra % valori[i]; // cifra = 678
  24.  
  25. if(risultato < 4 || i == 0) {
  26. for (int j = 0; j < risultato; j++) // j = 1 quindi restituisce M
  27. romano[contaromano++] = lettere[i]; // Stampo la lettera corrente
  28. }
  29. else if(risultato == 4) { // caso particolare
  30. romano[contaromano - 1] = lettere[i];
  31. romano[contaromano++] = lettere[i-2];
  32. }
  33. }
  34.  
  35. for(int i = 0; i < contaromano; i++)
  36. cout << romano[i];
  37.  
  38. return 0;
  39. }
  40.  
  41. int posizioneLettera(char lettere[], char lettera) {
  42. int i = 0;
  43.  
  44. while(lettere[i] != '\0') {
  45. if(lettere[i] == lettera) // Se la lettera combacia
  46. return i; // Ritorno l'indice
  47. i++;
  48. }
  49.  
  50. return -1; // La lettere non esiste
  51. }
Success #stdin #stdout 0.02s 2728KB
stdin
1977
stdout
MCMLXXVII