Pagini recente » Cod sursa (job #1687531) | Cod sursa (job #2277) | Cod sursa (job #1361189) | Cod sursa (job #2899477) | Cod sursa (job #2298966)
#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[100020],v[100020];
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;
}