Pagini recente » Cod sursa (job #1721713) | Cod sursa (job #1607396) | Cod sursa (job #2793247) | Cod sursa (job #2405566) | Cod sursa (job #2213759)
#include <iostream>
#include <unordered_map>
#include <set>
#include <queue>
#include <memory>
#include <algorithm>
#include <map>
#include <stack>
#include <vector>
#include <string>
#include <cstring>
#include <functional>
using namespace std;
int eval(const string &s, int &i);
int term(const string &s, int &i) {
int rez = 0;
if (s[i] == '(') {
++i;
rez = eval(s, i);
++i;
return rez;
}
while ('0' <= s[i] && s[i] <= '9') {
rez = rez * 10 + (s[i++] - '0');
}
return rez;
}
int factor(const string &s, int &i) {
char op;
int x = term(s, i), y;
while ((op = s[i]) == '*' || (op = s[i]) == '/') {
++i;
y = term(s, i);
if (op == '*') x *= y; else x /= y;
}
return x;
}
int eval(const string &s, int &i) {
char op;
int x = factor(s, i), y;
while ((op = s[i]) == '+' || (op = s[i]) == '-') {
++i; // pass operator
y = factor(s, i);
if (op == '+') x += y; else x -= y;
}
return x;
}
int eval(string &s) {
s += '$';
int i=0;
return eval(s,i);
}
int main() {
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
string s;
cin >> s;
cout << eval(s) << endl;
return 0;
}