Pagini recente » Cod sursa (job #2099693) | Cod sursa (job #1489659) | Cod sursa (job #1799356) | Cod sursa (job #2823743) | Cod sursa (job #1517607)
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<cctype>
#define DMR 100004
#define DMP 100
using namespace std;
fstream fin("evaluare.in",ios::in),fout("evaluare.out",ios::out);
string inp;
stack <char> c;
char p[DMP];
int rpn[DMR],lrpn=0;
int conversnr(int&i)
{
int aux=0;
for( ;i<inp.size()&&isdigit(inp[i]);i++)
{
aux=aux*10+(inp[i]-'0');
}
return aux;
}
void evaluare(char semn)
{
int a,b;
b=rpn[lrpn];
a=rpn[lrpn-1];
if(semn=='+')rpn[--lrpn]=a+b;
if(semn=='-')rpn[--lrpn]=a-b;
if(semn=='*')rpn[--lrpn]=a*b;
if(semn=='/')rpn[--lrpn]=a/b;
}
void conversrpn()
{
int i;
for(i=0;i<inp.size();i++)
{
if(isdigit(inp[i]))
{
rpn[++lrpn]=conversnr(i);
i--;
}
else
{
if(inp[i]=='(') c.push(inp[i]);
else
{
if(inp[i]==')')
{
while(c.top()!='(')
{
evaluare(c.top());
c.pop();
}
c.pop();
}
else
{
while(!c.empty()&&p[c.top()]>=p[inp[i]])
{
evaluare(c.top());
c.pop();
}
c.push(inp[i]);
}
}
}
}
while(!c.empty())
{
evaluare(c.top());
c.pop();
}
}
int main()
{
p['*']=2;
p['/']=2;
p['-']=1;
p['+']=1;
p[')']=0;
p['(']=0;
int i;
fin>>inp;
conversrpn();
fout<<rpn[lrpn];
}