Pagini recente » Cod sursa (job #590202) | Cod sursa (job #138194) | Cod sursa (job #2133686) | Cod sursa (job #755923) | Cod sursa (job #2998622)
#include <iostream>
#include <fstream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string expr = "";
vector<int> nr;
vector<char> op;
void solveLast()
{
int aux = nr[nr.size() - 1];
nr.pop_back();
switch (op[op.size() - 1])
{
case '+': nr[nr.size() - 1] += aux; break;
case '-': nr[nr.size() - 1] -= aux; break;
case '/': nr[nr.size() - 1] /= aux; break;
case '*': nr[nr.size() - 1] *= aux; break;
}
op.pop_back();
}
void addNumber(int& i)
{
int temp = 0;
while (expr[i] >= '0' && expr[i] <= '9')
{
temp += expr[i] - '0';
temp *= 10;
i++;
}
i--;
nr.push_back(temp / 10);
}
int prioritate(char a)
{
if (a == '+' || a == '-')
{
return 0;
}
else if (a == '*' || a == '/')
{
return 1;
}
return -1;
}
int main()
{
fin >> expr;
op.push_back('(');
expr += ')';
for (int i = 0; i < expr.size(); i++)
{
if (expr[i] == '(')
{
op.push_back(expr[i]);
}
else if (expr[i] == ')')
{
while (op[op.size() - 1] != '(')
{
solveLast();
}
op.pop_back();
}
else if (expr[i] >= '0' && expr[i] <= '9')
{
addNumber(i);
}
else
{
while (prioritate(expr[i]) <= prioritate(op[op.size() - 1]))
{
solveLast();
}
op.push_back(expr[i]);
}
}
fout << nr[nr.size() - 1];
return 0;
}