Pagini recente » Cod sursa (job #1725836) | Cod sursa (job #1993870) | Cod sursa (job #2147228) | Cod sursa (job #822065) | Cod sursa (job #2735495)
#include <stdio.h>
#include <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
ifstream fin {"evaluare.in"};
ofstream fout {"evaluare.out"};
string s;
int eval(int &pos);
int termen(int &pos);
int factor(int &pos);
int eval(int &pos) {
int res = termen(pos);
while(s[pos] == '+' || s[pos] == '-') {
if (s[pos] == '+') {
pos++;
res += termen(pos);
} else {
pos++;
res -= termen(pos);
}
}
return res;
}
int termen(int &pos) {
int res = factor(pos);
while(s[pos] == '*' || s[pos] == '/') {
if (s[pos] == '*') {
pos++;
res *= factor(pos);
} else {
pos++;
res /= factor(pos);
}
}
return res;
}
int factor(int &pos) {
int res = 0;
if ('0' <= s[pos] && s[pos] <= '9') {
while('0' <= s[pos] && s[pos] <= '9') {
res = res * 10 + s[pos] - '0';
pos++;
}
return res;
} else if (s[pos] == '(') {
pos++;
res = eval(pos);
pos++;
}
return res;
}
int main(void) {
// freopen("evaluare.in", "r", stdin);
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
fin >> s;
int pos = 0;
int res = eval(pos);
fout << res << '\n';
return 0;
}