Pagini recente » Cod sursa (job #2153209) | Cod sursa (job #2374848) | Cod sursa (job #1577445) | Cod sursa (job #1790172) | Cod sursa (job #3135569)
#include <bits/stdc++.h>
#define optim ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define ll long long
#define ull unsigned long long
#define ld long double
#define pb push_back
#define let auto
#define popcount __builtin_popcount
#define ctzll __builtin_ctzll
#define clzll __builtin_clzll
using namespace std;
string filename = "evaluare";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");
char s[100011];
char *p = s;
char operand[4][4] = {"+-", "*/", ""};
long operatie(long a, long b, char c)
{
switch (c)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return 0;
}
long eval(long);
long element()
{
long r = 0;
if (*p == '(')
{
++p;
r = eval(0);
++p;
}
else
{
while (strchr("0123456789", *p) && *p != '\0')
{
r = r * 10 + (*p - '0');
++p;
}
}
return r;
}
long hmax = 2;
long eval(long h)
{
long r;
if (h == hmax)
r = element();
else
r = eval(h + 1);
while (strchr(operand[h], *p) && *p != '\0') {
r = operatie(r,eval(h + 1),*(++p - 1));
}
return r;
}
int main()
{
fin >> s;
fout << eval(0);
return 0;
}