#include #include #include #include #include using namespace std; int rtoi[256] = {}; int reg[10]; void init() { rtoi['M'] = 1000; rtoi['D'] = 500; rtoi['C'] = 100; rtoi['L'] = 50; rtoi['X'] = 10; rtoi['V'] = 5; rtoi['I'] = 1; rtoi['O'] = 0; } void reset() { for (int i = 0; i < 10; ++i) reg[i] = -1; } int romtoi(const char * s) { int res = 0; int max = 0; int l = strlen(s); for (int i = l - 1; i >= 0; --i) { int v = rtoi[s[i]]; if (v < max) res -= v; else { max = v; res += v; } } return res; } char _buf[100]; char * itorom(int v) { char * p = _buf; while (v >= 1000) { *(p++) = 'M'; v -= 1000; } if (v >= 900) { *(p++) = 'C'; *(p++) = 'M'; v -= 900; } if (v >= 500) { *(p++) = 'D'; v -= 500; } if (v >= 400) { *(p++) = 'C'; *(p++) = 'D'; v -= 400; } while (v >= 100) { *(p++) = 'C'; v -= 100; } if (v >= 90) { *(p++) = 'X'; *(p++) = 'C'; v -= 90; } if (v >= 50) { *(p++) = 'L'; v -= 50; } if (v >= 40) { *(p++) = 'X'; *(p++) = 'L'; v -= 40; } while (v >= 10) { *(p++) = 'X'; v -= 10; } if (v >= 9) { *(p++) = 'I'; *(p++) = 'X'; v -= 9; } if (v >= 5) { *(p++) = 'V'; v -= 5; } if (v >= 4) { *(p++) = 'I'; *(p++) = 'V'; v -= 4; } while (v >= 1) { *(p++) = 'I'; v -= 1; } if (p == _buf) *(p++) = 'O'; *p = 0; return _buf; } char s[20000]; int main() { init(); reset(); for (;;gets(s)) { if (!*s) continue; if (s[0] == 'Q') { puts("Bye"); break; } if (s[0] == 'R') { reset(); puts("Ready"); continue; } char * p = s + 1; int res = 0; while (*p) { int s = (*(p++) == '-' ? -1 : 1); // printf("s=%d;", s); int v = 0; char * e; for (e = p; *e && *e != '-' && *e != '+'; ++e) ; char t = *e; *e = 0; // printf("%s|",p); if (*p >= '0' && *p <= '9') v = reg[*p - '0']; else v = romtoi(p); *e = t; if (v < 0) { res = -1; break; } res += s * v; p = e; } if (res >= 0 && res <= 10000) { reg[s[0] - '0'] = res; s[2] = 0; printf("%s%s\n", s, itorom(res)); } else puts("Error"); } return 0; }