Pagini recente » Cod sursa (job #2009603) | Cod sursa (job #2336196) | Cod sursa (job #2752549) | Cod sursa (job #702056) | Cod sursa (job #2869873)
#include <fstream>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
const int NMAX = 1e5 + 1;
char S[NMAX], *p;
static inline int Eval ();
static inline int Termen ();
static inline int Factor ();
static inline int Eval ()
{
int curr = Termen();
while(*p == '+' || *p == '-')
{
if(*p == '+')
++p, curr += Termen();
else ++p, curr -= Termen();
}
return curr;
}
static inline int Termen ()
{
int curr = Factor();
while(*p == '*' || *p == '/')
{
if(*p == '*')
++p, curr *= Factor();
else ++p, curr /= Factor();
}
return curr;
}
static inline int Factor ()
{
if(*p == '(')
{
++p;
int ans = Eval();
++p;
return ans;
}
int nr = 0, sign = 1;
if(*p == '-')
sign = -1, ++p;
while(*p >= '0' && *p <= '9')
nr = nr * 10 + (int)(*p - '0'), ++p;
return (nr * sign);
}
static inline void Read ()
{
f.tie(nullptr);
f >> (S + 1), p = S + 1;
return;
}
int main ()
{
Read();
g << Eval() << '\n';
return 0;
}