#include #include #include #include #include int reg[10]; using namespace std; int translate(const char *str) { if (str[0] >= '0' && str[0] <= '9') return reg[str[0] - '0']; int out = 0; int len = strlen(str); for (int i = 0; i < len; i++) { switch (str[i]) { case 'I': if (str[i+1] == 'X') { out += 9; i++; break; } if (str[i+1] == 'V') { out += 4; i++; break; } out += 1; break; case 'V': out += 5; break; case 'X': if (str[i+1] == 'L') { out += 40; i++; break; } if (str[i+1] == 'C') { out += 90; i++; break; } out += 10; break; case 'L': out += 50; break; case 'C': if (str[i+1] == 'D') { out += 400; i++; break; } if (str[i+1] == 'M') { out += 900; i++; break; } out += 100; break; case 'M': out += 1000; break; } } return out; } string back(int i) { if (i > 10000 || i < 0) return "Error"; if (i == 0) return "O"; // cout << "Preklad " << i << endl; string out; switch (i%10) { case 1: out = "I"; break; case 2: out = "II"; break; case 3: out = "III"; break; case 4: out = "IV"; break; case 5: out = "V"; break; case 6: out = "VI"; break; case 7: out = "VII"; break; case 8: out = "VIII"; break; case 9: out = "IX"; break; } i = i/10; switch (i%10) { case 1: out = "X" + out; break; case 2: out = "XX" + out; break; case 3: out = "XXX" + out; break; case 4: out = "XL" + out; break; case 5: out = "L" + out; break; case 6: out = "LX" + out; break; case 7: out = "LXX" + out; break; case 8: out = "LXXX" + out; break; case 9: out = "XC" + out; break; } i = i/10; switch (i%10) { case 1: out = "C" + out; break; case 2: out = "CC" + out; break; case 3: out = "CCC" + out; break; case 4: out = "CD" + out; break; case 5: out = "D" + out; break; case 6: out = "DC" + out; break; case 7: out = "DCC" + out; break; case 8: out = "DCCC" + out; break; case 9: out = "CM" + out; break; } i = i/10; for (int k = 0; k < i; k++) out = "M" + out; // cout << "prelozeno jako " << out << endl; return out; } int vypocti(const char* str) { string numero; bool pl = true; int res = 0; int len = strlen(str); for (int i = 0; i <= len; i++) { if (str[i] == '+' || str[i] == '-' || str[i] == 0) { int x = translate(numero.c_str()); if (x < 0) return -1; res += (pl ? +1 : -1) * x; pl = (str[i] == '+'); numero = ""; } else { numero += str[i]; } } return res; } int main() { string in; for (int i = 0; i < 10; i++) reg[i] = -1; while(true) { cin >> in; if (in == "QUIT") { cout << "Bye" << endl; return 0; } else if (in == "RESET") { for (int i = 0; i < 10; i++) reg[i] = -1; cout << "Ready" << endl; } else { int regnum = in[0] - '0'; int res = vypocti(in.c_str() + 2); string s = back(res); if (s == "Error") cout << s << endl; else { reg[regnum] = res; cout << regnum << "=" << s << endl; } } } return 0; }