Pagini recente » Cod sursa (job #333442) | Cod sursa (job #1965896) | Cod sursa (job #1779130) | Cod sursa (job #120389) | Cod sursa (job #3140312)
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
static constexpr int NMAX = (int)(1e5 + 1);
static inline int eval();
static inline int term();
static inline int factor();
char S[NMAX], *p;
static inline int eval()
{
int ans = term();
while (*p == '+' || *p == '-')
{
if (*p == '+')
++p, ans += term();
else
++p, ans -= term();
}
return ans;
}
static inline int term()
{
int ans = factor();
while (*p == '*' || *p == '/')
{
if (*p == '*')
++p, ans *= factor();
else
++p, ans /= factor();
}
return ans;
}
static inline int factor()
{
if (*p == '(')
{
++p;
int ans = eval();
++p;
return ans;
}
int ans = 0, sign = +1;
if (*p == '-')
sign = -1, ++p;
while (*p >= '0' && *p <= '9')
ans = ans * 10 + (int)(*p - '0'), ++p;
return (ans * sign);
}
int main()
{
f.tie(nullptr);
f >> S, p = S;
g << eval() << '\n';
return 0;
}