Pagini recente » Cod sursa (job #2745724) | Cod sursa (job #82978) | Cod sursa (job #213974) | Cod sursa (job #2284127) | Cod sursa (job #2923705)
using namespace std;
#include<bits/stdc++.h>
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int prioritate(char op) {
if (op == '*' || op == '/') {
return 2;
}
if (op == '+' || op == '-') {
return 1;
}
return 0;
}
int apply(int v1, int v2, char ch) {
if (ch == '*') {
return v1*v2;
}
if (ch == '/') {
return v1/v2;
}
if (ch == '-') {
return v1-v2;
}
if (ch == '+') {
return v1+v2;
}
return 0;
}
int eval(string s) {
stack<int> sv; ///stiva valori
stack<char> sc; ///stiva char
for (int i = 0; i<s.size(); i++) {
if (s[i] == ' ') {
continue;
} else if (s[i] >= '0' && s[i] <= '9') {
int val = 0;
while (i < s.size() && s[i] >= '0' && s[i] <= '9') {
val = val*10 + s[i] - '0';
i++;
}
i--;
sv.push(val);
} else if (s[i] == '(') {
sc.push('(');
} else if (s[i] == ')') {
while (sv.size() >= 2 && !sc.empty() && sc.top() != '(') {
int v1 = sv.top();
sv.pop();
int v2 = sv.top();
sv.pop();
char op = sc.top();
sc.pop();
int ans = apply(v2, v1, op);
sv.push(ans);
}
if (sc.empty() != 1 && sc.top() == '(') {
sc.pop();
}
} else {
while (sv.size() >= 2 && sc.empty() != 1 && prioritate(sc.top()) >= prioritate(s[i])) {
int v1 = sv.top();
sv.pop();
int v2 = sv.top();
sv.pop();
char op = sc.top();
sc.pop();
int ans = apply(v2, v1, op);
sv.push(ans);
}
sc.push(s[i]);
}
}
while (sv.size() >= 2 && sc.empty() != 1) {
int v1 = sv.top();
sv.pop();
int v2 = sv.top();
sv.pop();
char op = sc.top();
sc.pop();
int ans = apply(v2, v1, op);
sv.push(ans);
}
return sv.top();
}
int main() {
fin >> s;
fout << eval(s);
return 0;
}