Pagini recente » Cod sursa (job #2401642) | Cod sursa (job #2796690) | Cod sursa (job #1958914) | Cod sursa (job #119928) | Cod sursa (job #1738578)
#include<fstream>
#include<string>
#define MAXN 100000
#define ll long long
std::ifstream input("evaluare.in");
std::ofstream output("evaluare.out");
std::string infix;
int position = 0;
ll expression(int);
int priority(char op)
{
if(op == '+' || op == '-') return 0;
if(op == '/' || op == '*') return 1;
return -1;
}
ll evaluate(ll x, ll y, char op)
{
switch(op)
{
case '+': return x+y;
case '-': return x-y;
case '/': return x/y;
case '*': return x*y;
}
return -1;
}
ll expression(int level)
{
ll result = 0, next = 0; char op;
if(level == 2)
{
if(infix[position] == '(')
{
position++;
result = expression(0);
position++;
}
else
while(infix[position] >= '0' && infix[position] <= '9')
{
result = result * 10 + infix[position] - '0';
position++;
}
}
else
{
result = expression(level + 1);
while(priority(infix[position]) == level)
{
op = infix[position]; position++;
next = evaluate(result, expression(level + 1), op);
result = next;
}
}
return result;
}
int main()
{
std::getline(input,infix);
output << expression(0);
return 0;
}