Pagini recente » Cod sursa (job #132478) | Cod sursa (job #2544486) | Cod sursa (job #1744195) | Cod sursa (job #587861) | Cod sursa (job #1375391)
#include <cstring>
#include <fstream>
#include <algorithm>
using namespace std;
char A[100002];
int eval_a(int &x);
int eval_b(int &x);
int getnum(int &x)
{
int num = 0;
while (A[x] >= '0' && A[x] <= '9')
{
num = num * 10 + (A[x] - '0');
++x;
}
return num;
}
int eval_a(int &x) // expression
{
int result = 0, sign = 1;
while (true)
{
if (A[x] == ')' || A[x] == 0)
{
if (A[x] == ')') ++x;
break;
}
if (A[x] == '+' || A[x] == '-')
{
if (A[x] == '-') sign = -sign;
++x;
}
else
{
result += sign * eval_b(x);
sign = 1;
}
}
return result;
}
int eval_b(int &x) // term
{
int result = 1, sign = 1;
while (true)
{
if (A[x] == ')' || A[x] == '+' || A[x] == '-' || A[x] == 0)
break;
if (A[x] == '(')
{
++x;
if (sign == 1) result *= eval_a(x);
else result /= eval_a(x);
sign = 1;
}
else if (A[x] == '*' || A[x] == '/')
{
if (A[x] == '/') sign = -sign;
++x;
}
else
{
if (sign == 1) result *= getnum(x);
else result /= getnum(x);
sign = 1;
}
}
return result;
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.getline(A, 100002);
int r = 0;
fout << eval_a(r) << '\n';
fin.close();
fout.close();
}