Pagini recente » Cod sursa (job #2548964) | Cod sursa (job #2525944) | Cod sursa (job #193814) | Cod sursa (job #1258564) | Cod sursa (job #2990749)
#include <iostream>
#include <fstream>
#include <stack>
#include <string>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string expr;
stack<int> nr;
stack<char> op;
int main()
{
fin >> expr;
op.push('(');
expr += ')';
for (int i = 0; i < expr.size(); i++)
{
if (expr[i] >= '0' && expr[i] <= '9')
{
int temp = 0;
while (expr[i] >= '0' && expr[i] <= '9')
{
temp += expr[i] - '0';
temp *= 10;
i++;
}
i--;
nr.push(temp / 10);
}
if (!nr.empty() && (op.top() == '*' || op.top() == '/'))
{
int aux = nr.top();
nr.pop();
switch(op.top())
{
case '/': nr.top() /= aux; break;
case '*': nr.top() *= aux; break;
}
op.pop();
}
if (expr[i] == '-' || expr[i] == '+' || expr[i] == '/' || expr[i] == '*')
{
op.push(expr[i]);
}
if (expr[i] == '(')
{
op.push(expr[i]);
}
if (expr[i] == ')')
{
while (op.top() != '(')
{
int aux = nr.top();
nr.pop();
switch(op.top())
{
case '+': nr.top() += aux; break;
case '-': nr.top() -= aux; break;
case '/': nr.top() /= aux; break;
case '*': nr.top() *= aux; break;
}
op.pop();
}
op.pop();
}
}
fout << nr.top();
return 0;
}