#include #include #include char letters[] = {'O', 'I', 'V', 'X', 'L', 'C', 'D', 'M'}; int values[] = {0, 1, 5, 10, 50, 100, 500, 1000}; int mem[10] = {0}; int memUsed[10] = {0}; #define EXPRL 10000 int issmaller(int rad, char letter) { int i; int res = 0; for (i = 0; i < rad; i++) { if (letters[i] == letter) { res = i + 1; return res; } } return res; } typedef enum state {rn, und} state; int getvalue(char letter) { int i = 0; for (; i < 8; i++) if (letters[i] == letter) return values[i]; return 0; } int isgreater(char l1, char l2) { return getvalue(l1) < getvalue(l2); } void toRoman(int n) { int rady[4]; int i; for (i = 0; i < 4; i++) { if (i != 3) rady[i] = n % 10; else rady[i] = n ; n /= 10; } char buffer[EXPRL+1]; int pos = 0; switch (rady[0]) { case 3: buffer[pos++] = 'I'; case 2: buffer[pos++] = 'I'; case 1: buffer[pos++] = 'I'; break; case 4: buffer[pos++] = 'V'; buffer[pos++] = 'I'; break; case 5: buffer[pos++] = 'V'; break; case 6:buffer[pos++] = 'I';buffer[pos++] = 'V'; break; case 7:buffer[pos++] = 'I';buffer[pos++] = 'I';buffer[pos++] = 'V'; break; case 8:buffer[pos++] = 'I';buffer[pos++] = 'I';buffer[pos++] = 'I';buffer[pos++] = 'V'; break; case 9:buffer[pos++] = 'I';buffer[pos++] = 'X'; break; } if (!n) buffer[pos] = 'O'; switch (rady[1]) { case 3: buffer[pos++] = 'X'; case 2: buffer[pos++] = 'X'; case 1: buffer[pos++] = 'X'; break; case 4: buffer[pos++] = 'L'; buffer[pos++] = 'X'; break; case 5: buffer[pos++] = 'L'; break; case 6:buffer[pos++] = 'X';buffer[pos++] = 'L'; break; case 7:buffer[pos++] = 'X';buffer[pos++] = 'X';buffer[pos++] = 'L'; break; case 8:buffer[pos++] = 'X';buffer[pos++] = 'X';buffer[pos++] = 'X';buffer[pos++] = 'L'; break; case 9:buffer[pos++] = 'X';buffer[pos++] = 'C'; break; } switch (rady[2]) { case 3: buffer[pos++] = 'C'; case 2: buffer[pos++] = 'C'; case 1: buffer[pos++] = 'C'; break; case 4: buffer[pos++] = 'D'; buffer[pos++] = 'C'; break; case 5: buffer[pos++] = 'D'; break; case 6:buffer[pos++] = 'C';buffer[pos++] = 'D'; break; case 7:buffer[pos++] = 'C';buffer[pos++] = 'C';buffer[pos++] = 'D'; break; case 8:buffer[pos++] = 'C';buffer[pos++] = 'C';buffer[pos++] = 'C';buffer[pos++] = 'D'; break; case 9:buffer[pos++] = 'C';buffer[pos++] = 'M'; break; } for (i = 0; i < rady[3]; i++) buffer[pos++] = 'M'; char res[EXPRL+1]; for (i = 0 ; i 10000) printf("Error\n"); else { printf("%d=", reg); toRoman(num); printf("\n"); } } } scanf("\n"); } return 0; }