Pagini recente » Cod sursa (job #672242) | Cod sursa (job #2082508) | Cod sursa (job #1810484) | Cod sursa (job #3032120) | Cod sursa (job #2575712)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
map < char, int > m;
stack < int, vector < int > > val;
stack < char, vector < char > > op;
int Calc(int a, int b, char o)
{
switch (o)
{
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
}
int main()
{
fin >> s;
m['*'] = 10;
m['/'] = 10;
m['+'] = 1;
m['-'] = 1;
m['('] = -1;
int st = s.length();
for (int i = 0; i < st; i++)
{
if (s[i] == '(')
op.push('(');
else if (s[i] == ')')
{
while (!op.empty() && op.top() != '(')
{
char o = op.top();
op.pop();
int a = val.top();
val.pop();
int b = val.top();
val.pop();
val.push(Calc(b, a, o));
}
if (!op.empty())
op.pop();
}
else if (isdigit(s[i]))
{
int nr = 0;
while (isdigit(s[i]))
{
nr = nr * 10 + s[i] - 48;
i++;
}
i--;
val.push(nr);
}
else
{
if (!op.empty() && m[op.top()] >= m[s[i]] )
{
char o = op.top();
op.pop();
int a = val.top();
val.pop();
int b = val.top();
val.pop();
val.push(Calc(b, a, o));
}
op.push(s[i]);
}
}
while (!op.empty())
{
char o = op.top();
op.pop();
int a = val.top();
val.pop();
int b = val.top();
val.pop();
val.push(Calc(b, a, o));
}
fout << val.top();
fin.close();
fout.close();
return 0;
}