Pagini recente » Cod sursa (job #2463440) | Cod sursa (job #1793551) | Cod sursa (job #268682) | Cod sursa (job #1452651) | Cod sursa (job #2884148)
#include <bits/stdc++.h>
using namespace std;
string const& task("evaluare");
ifstream fin(task + ".in");
ofstream fout(task + ".out");
int const N(1e5 + 5);
char s[N];
int n, i;
inline int Eval();
inline int Termen();
inline int Factor();
int main() {
fin >> s;
n = static_cast<int>(strlen(s));
fout << Eval();
return 0;
}
int Eval() {
int res = Termen();
while (i < n && (s[i] == '+' || s[i] == '-')) {
++i;
if (s[i - 1] == '+')
res += Termen();
else res -= Termen();
}
return res;
}
int Termen() {
int res = Factor();
while (i < n && (s[i] == '*' || s[i] == '/')) {
++i;
if (s[i - 1] == '*')
res *= Factor();
else res /= Factor();
}
return res;
}
int Factor() {
int res = 0;
if (isdigit(s[i])) {
while (i < n && isdigit(s[i]))
res = res * 10 + (s[i++] - '0');
}
else {
++i;
res = Eval();
++i;
}
return res;
}