Pagini recente » Cod sursa (job #1120575) | Cod sursa (job #2507410) | Cod sursa (job #986206) | Cod sursa (job #84542) | Cod sursa (job #2529105)
#include<cstdio>
#include<cstring>
#include<stack>
std :: stack <char> operatori;
std :: stack <char> numere;
const int LMAX = 100000;
char grad[257];
char expresie[LMAX + 1];
int main()
{
freopen("evaluare.in" , "r" , stdin);
freopen("evaluare.out" , "w" , stdout);
scanf("%s",expresie);
int len = strlen(expresie);
grad['+'] = grad['-'] = 1;
grad['*'] = grad['/'] = 2;
for(int i = 0 ; i < len ; i ++)
{
if(expresie[i] == '(')
{
operatori.push('(');
}
else if(expresie[i] == '+' || expresie[i] == '-' || expresie[i] == '*' || expresie[i] == '/')
{
while(operatori.empty() == false && operatori.top() != '(' && grad[ expresie[i] ] <= grad[operatori.top()])
{
int val1 = numere.top();
numere.pop();
int val2 = numere.top();
numere.pop();
if(operatori.top() == '+')
numere.push(val1 + val2);
if(operatori.top() == '-')
numere.push(val1 - val2);
if(operatori.top() == '*')
numere.push(val1 * val2);
if(operatori.top() == '/')
numere.push(val2 / val1);
operatori.pop();
}
operatori.push(expresie[i]);
}
else if(expresie[i] >= '0' && expresie[i] <= '9')
{
int number = 0;
while(expresie[i] >='0' && expresie[i] <= '9'){
number = number * 10 + expresie[i] - '0';
i ++;
}
numere.push(number);
i --;
}
else if(expresie[i] == ')')
{
while(operatori.top() != '(')
{
int val1 = numere.top();
numere.pop();
int val2 = numere.top();
numere.pop();
if(operatori.top() == '+')
numere.push(val1 + val2);
if(operatori.top() == '-')
numere.push(val1 - val2);
if(operatori.top() == '*')
numere.push(val1 * val2);
if(operatori.top() == '/')
numere.push(val2 / val1);
operatori.pop();
}
}
}
while(operatori.size() > 1)
{
int val1 = numere.top();
numere.pop();
int val2 = numere.top();
numere.pop();
if(operatori.top() == '+')
numere.push(val1 + val2);
if(operatori.top() == '-')
numere.push(val1 - val2);
if(operatori.top() == '*')
numere.push(val1 * val2);
if(operatori.top() == '/')
numere.push(val2 / val1);
operatori.pop();
}
printf("%d" , numere.top());
}