Pagini recente » Cod sursa (job #1467578) | Cod sursa (job #282059) | Cod sursa (job #828078) | Cod sursa (job #722671) | Cod sursa (job #2624346)
#include <fstream>
#include <cstring>
#define NMAX 100005
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char op[NMAX],s[NMAX];
int nr[NMAX],nr_top,n,op_top;
int hai(int a, int b, char c)
{
if(c=='+')
return a+b;
else if(c=='*')
return a*b;
else if(c=='-')
return a-b;
else if(c=='/')
return a/b;
else
return -1;
}
bool semn(char c)
{
if(c=='+' || c=='-' || c=='*' || c=='/')
return true;
return false;
}
bool cifra(char c)
{
if(c<='9' && c>='0')
return true;
return false;
}
int prioritate(char c)
{
if(c=='+' || c=='-')
return 0;
if(c=='*' || c=='/')
return 1;
return -1;
}
int main() {
cin.getline(s,NMAX);
n=(int)strlen(s);
op[0]='(';
s[n]=')';
s[n+1]='\0';
for(int i=0;i<=n;i++)
if(cifra(s[i]))
{
int x=0;
do
{
x=x*10+(int)(s[i]-'0');
i++;
}
while (cifra(s[i]));
i--;
nr[++nr_top]=x;
}
else if(s[i]=='(')
op[++op_top]=s[i];
else if(s[i]==')')
{
while(op[op_top]!='(')
{
int x=hai(nr[nr_top-1], nr[nr_top],op[op_top]);
nr_top--;
nr[nr_top]=x;
op_top--;
}
op_top--;
}
else if(semn(s[i]))
{
while(op_top>0 && prioritate(s[i])<=prioritate(op[op_top]))
{
int x=hai(nr[nr_top-1], nr[nr_top],op[op_top]);
nr[--nr_top]=x;
op_top--;
}
op[++op_top]=s[i];
}
cout<<nr[1];
return 0;
}