Pagini recente » Borderou de evaluare (job #1582145) | Borderou de evaluare (job #32885) | Cod sursa (job #2785227)
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pi = pair<int, int>;
using pll = pair<ll, ll>;
using pd = pair<double, double>;
using pld = pair<ld, ld>;
// #define LOCAL
#ifdef LOCAL
ifstream cin("input.txt");
ofstream cout("output2.txt");
#else
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
#endif
#define cin ::cin
#define cout ::cout
int idx;
string expr;
int eval();
int termen();
int factor();
int eval()
{
int res = termen();
while (expr[idx] == '+' || expr[idx] == '-')
{
if (expr[idx] == '+')
{
++idx;
res += termen();
}
else
{
++idx;
res -= termen();
}
}
return res;
}
int termen()
{
int res = factor();
while (expr[idx] == '*' || expr[idx] == '/')
{
if (expr[idx] == '*')
{
++idx;
res *= factor();
}
else
{
++idx;
res /= factor();
}
}
return res;
}
int factor()
{
if (expr[idx] == '(')
{
++idx;
const int res = eval();
++idx;
return res;
}
int res{};
while (isdigit(expr[idx]))
{
res = res * 10 + expr[idx++] - '0';
}
return res;
}
int main()
{
cin >> expr;
expr.push_back('?');
if (expr.front() == '-')
{
expr = "0 - " + expr;
}
cout << eval();
}