#include #include using namespace std; int val[256]; int r2i(string s) { int res = 0; for (int i = 0; i < (int)s.size(); i ++) { if (i < (int)s.size() - 1 && val[s[i]] < val[s[i + 1]]) { res -= val[s[i]]; } else { res += val[s[i]]; } } return res; } string i2r(int v) { string res = ""; if (v == 0) { res = "O"; } for (int i = 0; i < v / 1000; i ++) { res += "M"; } if (v % 1000 >= 900) { res += "CM"; } else if (v % 1000 >= 500) { res += "D"; for (int i = 0; i < (v % 500) / 100; i ++) { res += "C"; } } else if (v % 1000 >= 400) { res += "CD"; } else { for (int i = 0; i < (v % 1000) / 100; i ++) { res += "C"; } } if (v % 100 >= 90) { res += "XC"; } else if (v % 100 >= 50) { res += "L"; for (int i = 0; i < (v % 50) / 10; i ++) { res += "X"; } } else if (v % 100 >= 40) { res += "XL"; } else { for (int i = 0; i < (v % 100) / 10; i ++) { res += "X"; } } if (v % 10 >= 9) { res += "IX"; } else if (v % 10 >= 5) { res += "V"; for (int i = 0; i < v % 5; i ++) { res += "I"; } } else if (v % 10 >= 4) { res += "IV"; } else { for (int i = 0; i < v % 10; i ++) { res += "I"; } } return res; } int main() { int reg[10]; char str[20000]; val['I'] = 1; val['V'] = 5; val['X'] = 10; val['L'] = 50; val['C'] = 100; val['D'] = 500; val['M'] = 1000; for (int i = 0; i < 10; i ++) { reg[i] = -1; } while (true) { char c; scanf(" %c", &c); if (c == 'R') { scanf("%s", str); for (int i = 0; i < 10; i ++) { reg[i] = -1; } printf("Ready\n"); } else if (c == 'Q') { scanf("%s", str); printf("Bye\n"); return 0; } else { int ri = c - '0'; int res = 0; bool ok = true; scanf("%c", &c); c = '+'; while (c == '+' || c == '-') { scanf("%[0-9A-Z]s", str); if (str[0] >= '0' && str[0] <= '9') { if (reg[str[0] - '0'] == -1) { ok = false; } else if (c == '+') { res += reg[str[0] - '0']; } else { res -= reg[str[0] - '0']; } } else { if (c == '+') { res += r2i(string(str)); } else { res -= r2i(string(str)); } } scanf("%c", &c); } if (res < 0 || res > 10000 || !ok) { printf("Error\n"); } else { reg[ri] = res; printf("%d=%s\n", ri, i2r(reg[ri]).c_str()); } } } }