Pagini recente » Cod sursa (job #2590756) | Istoria paginii runda/warmup | Cod sursa (job #964268) | Cod sursa (job #417592) | Cod sursa (job #2221435)
#include<fstream>
#include<cstring>
#include<string>
using namespace std;
string exp;
int idx;
int eval();
int level_two_block() {
int r;
if (exp[idx]=='(') {
++idx;
r=eval();
++idx;
}
else {
r=0;
while (idx<exp.length() && exp[idx]>='0' && exp[idx]<='9') r=r*10 + exp[idx++] - '0';
}
return r;
}
int level_one_block() {
int r = level_two_block();
while (idx<exp.length() && (exp[idx]=='*' || exp[idx]=='/')) {
char op = exp[idx++];
int next = level_two_block();
if (op=='*') r*=next;
else r/=next;
}
return r;
}
int eval() {
int r = level_one_block();
while (idx<exp.length() && (exp[idx]=='+' || exp[idx]=='-')) {
char op = exp[idx++];
int next = level_one_block();
if (op=='+') r+=next;
else r-=next;
}
return r;
}
int main(void) {
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
getline(cin,exp);
idx=0;
cout<<eval();
return 0;
}