Pagini recente » Cod sursa (job #1288040) | Cod sursa (job #1777343) | Rating Economu Victor (VictorE07) | Cod sursa (job #1990654) | Cod sursa (job #2109834)
// codari: - =-1, +=-2, /=-11, *=-12, (=-21, )=-22
#include <iostream>
#include <cstdio>
#include <stack>
#include <cstring>
using namespace std;
stack<int>valori;
stack<int>operanzi;
int numar=0,n,ok;
char sir[100005];
int verif(int x)
{
if (operanzi.top()<=x+5 || (operanzi.top()==-11 && x==-11))
{
return 1;
}
return 0;
}
void operare()
{
int a=valori.top();
valori.pop();
if (!valori.empty())
{
int b=valori.top();
valori.pop();
if (!operanzi.empty())
{
int c=operanzi.top();
operanzi.pop();
if (c==-11)
valori.push(b-a);
else if (c==-12)
valori.push(a+b);
else if (c==-21)
valori.push(b/a);
else if (c==-22)
valori.push(a*b);
}
}
}
void paranteza()
{
while (operanzi.top()!=-1)
{
if (!valori.empty()){
int a=valori.top();
valori.pop();
if (!valori.empty()){
int b=valori.top();
valori.pop();
int c=operanzi.top();
operanzi.pop();
if (c==-11)
valori.push(b-a);
else if (c==-12)
valori.push(a+b);
else if (c==-21)
valori.push(b/a);
else if (c==-22)
valori.push(a*b);
}
}
}
operanzi.pop();
}
void parcurgere()
{
while (!operanzi.empty())
{
int a=valori.top();
valori.pop();
if (!valori.empty())
{
int b=valori.top();
valori.pop();
int c=operanzi.top();
operanzi.pop();
if (c==-11)
valori.push(b-a);
else if (c==-12)
valori.push(a+b);
else if (c==-21)
valori.push(b/a);
else if (c==-22)
valori.push(a*b);
}
}
printf("%d",valori.top());
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
fgets(sir,100000,stdin);
n=strlen(sir);
if (sir[n-1]=='\n')
{
sir[n-1]=NULL;
n--;
}
for (int i=0; i<n; i++)
{
if (sir[i]>='0' && sir[i]<='9')
{
numar=numar*10+(sir[i]-'0');
ok=1;
}
else
{
if (ok==1)
valori.push(numar);
if (sir[i]=='-')
{
if (verif(-11)==1)
{
operare();
}
operanzi.push(-11);
}
else if (sir[i]=='+')
{
if (verif(-12)==1)
{
operare();
}
operanzi.push(-12);
}
else if (sir[i]=='*')
{
if (verif(-22)==1)
{
operare();
}
operanzi.push(-22);
}
else if (sir[i]=='/')
{
if (verif(-23)==1)
{
operare();
}
operanzi.push(-21);
}
else if (sir[i]=='(')
{
operanzi.push(-1);
}
else
{
paranteza();
}
ok=0;
numar=0;
}
}
if (ok==1)
valori.push(numar);
parcurgere();
return 0;
}