Pagini recente » Cod sursa (job #1567085) | Cod sursa (job #1922483) | Cod sursa (job #1154634) | Cod sursa (job #186781) | Cod sursa (job #2969628)
#include <iostream>
#include <string>
using namespace std;
string expresie;
int semn(char a, char b, int st, int dr)
{
int cnt = 0;
for (int i = dr; i >= st; i--)
if (expresie[i] == ')')
cnt++;
else if (expresie[i] == '(')
cnt--;
else if ((expresie[i] == a || expresie[i] == b) && cnt == 0)
return i;
return -1;
}
int numar(int st, int dr)
{
int p = 1;
int num = 0;
for (int i = dr; i >= st; i--)
num += (expresie[i] - '0') * p, p *= 10;
return num;
}
int eval(int st, int dr)
{
int poz = semn('+', '-', st, dr);
if (poz != -1)
{
int e1 = eval(st, poz - 1);
int e2 = eval(poz + 1, dr);
if (expresie[poz] == '+')
return e1 + e2;
else
return e1 - e2;
}
poz = semn('*', '/', st, dr);
if (poz != -1)
{
int e1 = eval(st, poz - 1);
int e2 = eval(poz + 1, dr);
if (expresie[poz] == '*')
return e1 * e2;
else
return e1 / e2;
}
if (expresie[st] == '(' && expresie[dr] == ')')
return eval(st + 1, dr - 1);
return numar(st, dr);
}
int main()
{
getline(cin, expresie);
cout << eval(0, expresie.size() - 1);
return 0;
}