Pagini recente » Cod sursa (job #2329624) | Cod sursa (job #868161) | Cod sursa (job #1294264) | Cod sursa (job #2044652) | Cod sursa (job #2991094)
#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;
int main()
{
fin >> expr;
op.push_back('(');
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_back(temp / 10);
}
if (!nr.empty() && (op[op.size() - 1] == '*' || op[op.size() - 1] == '/'))
{
int aux = nr[nr.size() - 1];
nr.pop_back();
//cout << aux << ' ' << nr.top() << ' ' << op.top() << '\n';
switch(op[op.size() - 1])
{
case '/': nr[nr.size() - 1] /= aux; break;
case '*': nr[nr.size() - 1] *= aux; break;
}
op.pop_back();
//cout << nr.top() << ' ';
}
if (expr[i] == '-' || expr[i] == '+' || expr[i] == '/' || expr[i] == '*')
{
op.push_back(expr[i]);
}
if (expr[i] == '(')
{
op.push_back(expr[i]);
}
if (expr[i] == ')')
{
while (op[op.size() - 1] != '(')
{
int aux = nr[nr.size() - 1];
nr.pop_back();
//cout << aux << ' ' << nr.top() << ' ' << op.top() << '\n';
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();
//cout << nr.top() << ' ';
}
op.pop_back();
}
}
fout << nr[nr.size() - 1];
return 0;
}