#include #include #include #include #include #include using namespace std; bool err=false; map reg; string dv[]={"IV","IX","XL","XC","CD","CM"}; int dval[]={4,9,40,90,400,900}; string jv[]={"O","I","V","X","L","C","D","M"}; int jval[]={0,1,5,10,50,100,500,1000}; int evRim(string s) { if (s.size()==0) return 0; if (s.size()>=2) { string prefix=s.substr(0,2); for (int i=0;i<6;i++) { if (prefix==dv[i]) { return dval[i]+evRim(s.substr(2,s.size()-2)); } } } for (int i=0;i<8;i++) { if (s[0]==jv[i][0]) return jval[i]+evRim(s.substr(1,s.size()-1)); } } int ev(string s) { if (s=="O"||s.size()==0) return 0; if (s[0]=='+') return ev(s.substr(1,s.size()-1)); else if (s[0]=='-') return -ev(s.substr(1,s.size()-1)); else { if (s[0]>='0'&&s[0]<='9') { if (reg.find(s)==reg.end()||reg[s]==-1) { err=true; return -1; } else return reg[s]; } else { return evRim(s); } } } int eval(string s) { vector v; string t=""; for (int i=0;i0) v.push_back(t); int ret=0; for (int i=0;i>line) { if (line=="QUIT") { cout<<"Bye"<>r>>expr; int val=eval(expr); if (err||val<0||val>10000) cout<<"Error"<