Pagini recente » Cod sursa (job #801486) | Cod sursa (job #235205) | Cod sursa (job #2463229) | Cod sursa (job #44663) | Cod sursa (job #2941860)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("evaluare.in");
ofstream cout ("evaluare.out");
char s[100005],stivaop[100005],kop;
int n, k,stivanr[100005],knr;
int evaluare (int a, int b, int op)
{
if(op == '+')
return a+b;
else
if(op == '-')
return a-b;
else
if(op == '*')
return a*b;
else
if(op == '/')
return a/b;
}
int main()
{
int prior[256];
prior['('] = 0;
prior['+'] = 1;
prior['-'] = 1;
prior['*'] = 2;
prior['/'] = 2;
cin >> s;
for(int i = 0; i<strlen(s); i++)
{
if(s[i] == '(')
{
stivaop[++kop] = '(';
}
else
{
if(s[i] == ')')
{while(stivaop[kop] != '(')
{
char op = stivaop[kop];
int a = stivanr[knr-1],b = stivanr[knr];
int rez = evaluare(a,b,op);
kop--;
knr--;
stivanr[knr] = rez;
}
kop --; /// elimin paranteza deschisa
}
else
if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
{
while(kop > 0 && prior[s[i]]<=prior[stivaop[kop]])
{
char op = stivaop[kop];
int a = stivanr[knr-1],b = stivanr[knr];
int rez = evaluare(a,b,op);
kop--;
knr--;
stivanr[knr] = rez;
}
stivaop[++kop] = s[i];
}
else
{
int nr = 0;
while(isdigit(s[i]))
{
nr = nr * 10 + s[i] - '0';
i++;
}
stivanr[++knr] = nr;
i--;
}
}
}
while(kop > 0)
{
char op = stivaop[kop];
int a = stivanr[knr-1],b = stivanr[knr];
int rez = evaluare(a,b,op);
kop--;
knr--;
stivanr[knr] = rez;
}
cout << stivanr[1];
return 0;
}