Pagini recente » Cod sursa (job #2691560) | Cod sursa (job #1902321) | Cod sursa (job #697279) | Cod sursa (job #467730) | Cod sursa (job #2298954)
#include <iostream>
#include <fstream>
#include <stack>
#include <ctype.h>
#include <cstring>
using namespace std;
int n,k=0;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[1000],v[1000];
stack <char> semn;
stack <int> S1;
void citire()
{
fin>>s;
n=strlen(s);
}
void afish()
{
cout<<v;
}
int priority(char c)
{
if(c=='(') return 1;
if(c==')') return -1;
if(c=='+'||c=='-') return 2;
return 3;
}
void rezolva()
{
int x=S1.top();
S1.pop();
int y=S1.top();
S1.pop();
char c=semn.top();
int rasp;
if(c=='-') rasp=y-x;
if(c=='+') rasp=x+y;
if(c=='/') rasp=y/x;
if(c=='*') rasp=x*y;
S1.push(rasp);
}
void rez()
{
for(int i=0; i<n; i++)
{ int nr=0;
if(isalnum(s[i])){while(isalnum(s[i])) {v[k++]=s[i]; nr=nr*10+s[i]-'0'; i++;} S1.push(nr); i--;}
else
{
int p=priority(s[i]);
if(p==1) semn.push('(');
else if(p==-1)
{
while(semn.top()!='(')
{
v[k++]=semn.top();
rezolva();
semn.pop();
}
semn.pop();
}
else
{
while(!semn.empty()&&priority(semn.top())>p&&priority(semn.top())>1)
{
v[k++]=semn.top();
rezolva();
semn.pop();
}
semn.push(s[i]);
}
}
}
while(!semn.empty())
{
v[k++]=semn.top();
rezolva();
semn.pop();
}
}
int main()
{
citire();
rez();
// afish();
fout<<S1.top();
return 0;
}