#include <iostream>
#define MAXLETTERE 7
using namespace std;
int posizioneLettera(char[], char);
int main() {
char lettere[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'}; // Le sette lettere
int valori[] = {1000, 500, 100, 50, 10, 5, 1}; // I valori di ogni lettera
int risultato = 0;
int cifra;
char romano[255];
int contaromano = 0;
do {
cin >> cifra;
} while(cifra < 0 || cifra > 4999); // Numero massimo rappresentabile con le M.
// ** SUPREMO CICLO DI CONVERSIONE **
for (int i = 0; i < MAXLETTERE; i++) {
risultato = cifra / valori[i]; // risultato = 1678 / 1000
cifra = cifra % valori[i]; // cifra = 678
if(risultato < 4 || i == 0) {
for (int j = 0; j < risultato; j++) // j = 1 quindi restituisce M
romano[contaromano++] = lettere[i]; // Stampo la lettera corrente
}
else if(risultato == 4) { // caso particolare
romano[contaromano - 1] = lettere[i];
romano[contaromano++] = lettere[i-2];
}
}
for(int i = 0; i < contaromano; i++)
cout << romano[i];
return 0;
}
int posizioneLettera(char lettere[], char lettera) {
int i = 0;
while(lettere[i] != '\0') {
if(lettere[i] == lettera) // Se la lettera combacia
return i; // Ritorno l'indice
i++;
}
return -1; // La lettere non esiste
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojZGVmaW5lIE1BWExFVFRFUkUgNwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBwb3NpemlvbmVMZXR0ZXJhKGNoYXJbXSwgY2hhcik7CgppbnQgbWFpbigpIHsKCWNoYXIgbGV0dGVyZVtdID0geydNJywgJ0QnLCAnQycsICdMJywgJ1gnLCAnVicsICdJJ307IC8vIExlIHNldHRlIGxldHRlcmUKCWludCB2YWxvcmlbXSA9IHsxMDAwLCA1MDAsIDEwMCwgNTAsIDEwLCA1LCAxfTsgLy8gSSB2YWxvcmkgZGkgb2duaSBsZXR0ZXJhCglpbnQgcmlzdWx0YXRvID0gMDsKCWludCBjaWZyYTsKCWNoYXIgcm9tYW5vWzI1NV07CglpbnQgY29udGFyb21hbm8gPSAwOwoJCglkbyB7CgkJY2luID4+IGNpZnJhOwoJfSB3aGlsZShjaWZyYSA8IDAgfHwgY2lmcmEgPiA0OTk5KTsgLy8gTnVtZXJvIG1hc3NpbW8gcmFwcHJlc2VudGFiaWxlIGNvbiBsZSBNLgoJCgkvLyAqKiBTVVBSRU1PIENJQ0xPIERJIENPTlZFUlNJT05FICoqCglmb3IgKGludCBpID0gMDsgaSA8IE1BWExFVFRFUkU7IGkrKykgewoJICAgICAgICByaXN1bHRhdG8gPSBjaWZyYSAvIHZhbG9yaVtpXTsgLy8gcmlzdWx0YXRvID0gMTY3OCAvIDEwMDAKCSAgICAgICAgY2lmcmEgPSBjaWZyYSAlIHZhbG9yaVtpXTsgLy8gY2lmcmEgPSA2NzgKCQoJICAgICAgICBpZihyaXN1bHRhdG8gPCA0IHx8IGkgPT0gMCkgewoJICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByaXN1bHRhdG87IGorKykgLy8gaiA9IDEgcXVpbmRpIHJlc3RpdHVpc2NlIE0KCSAgICAgICAgICAgICAgICByb21hbm9bY29udGFyb21hbm8rK10gPSBsZXR0ZXJlW2ldOyAvLyBTdGFtcG8gbGEgbGV0dGVyYSBjb3JyZW50ZQoJICAgICAgICB9CgkgICAgICAgIGVsc2UgaWYocmlzdWx0YXRvID09IDQpIHsgLy8gY2FzbyBwYXJ0aWNvbGFyZQoJICAgICAgICAgICAgcm9tYW5vW2NvbnRhcm9tYW5vIC0gMV0gPSBsZXR0ZXJlW2ldOwoJICAgICAgICAgICAgcm9tYW5vW2NvbnRhcm9tYW5vKytdID0gbGV0dGVyZVtpLTJdOwoJICAgICAgICB9Cgl9CgoJZm9yKGludCBpID0gMDsgaSA8IGNvbnRhcm9tYW5vOyBpKyspCgljb3V0IDw8IHJvbWFub1tpXTsKCQkKCXJldHVybiAwOwp9CgppbnQgcG9zaXppb25lTGV0dGVyYShjaGFyIGxldHRlcmVbXSwgY2hhciBsZXR0ZXJhKSB7CglpbnQgaSA9IDA7CgkKCXdoaWxlKGxldHRlcmVbaV0gIT0gJ1wwJykgewoJCWlmKGxldHRlcmVbaV0gPT0gbGV0dGVyYSkgLy8gU2UgbGEgbGV0dGVyYSBjb21iYWNpYQoJCQlyZXR1cm4gaTsgLy8gUml0b3JubyBsJ2luZGljZQoJCWkrKzsKCX0KCQoJcmV0dXJuIC0xOyAvLyBMYSBsZXR0ZXJlIG5vbiBlc2lzdGUKfQ==