Pagini recente » Cod sursa (job #3273982) | Cod sursa (job #1945408) | Cod sursa (job #3291065) | Cod sursa (job #3190439) | Cod sursa (job #3293298)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string v;
stack<int>s;
/// -31311 => +
/// -22111 => *
/// -33231 => (
/// -32221 => /
/// -32321 => -
int main()
{
fin>>v;
s.push(-33231);
for(int i=0; i<v.size(); i++)
{
if(v[i]>='0' && v[i]<='9' || (v[i]=='-' && i+1<v.size() && v[i+1]>='0' && v[i+1]<='9'))
{
int nr=0;
int semn=0;
if(v[i]=='-')
{
i++;
semn=1;
}
while(i<v.size() && v[i]>='0' && v[i]<='9')
{
nr=nr*10+v[i]-'0';
i++;
}
if(semn)
nr=-nr;
i--;
if(s.top()==-22111) ///*
{
s.pop();
int prod=nr*s.top();
s.pop();
s.push(prod);
}
else if(s.top()==-32221) /// /
{
s.pop();
int cat=s.top()/nr;
s.pop();
s.push(cat);
}
else s.push(nr);
}
else if(v[i]=='+')
s.push(-31311);
else if(v[i]=='*')
s.push(-22111);
else if(v[i]=='/')
s.push(-32221);
else if(v[i]=='(')
s.push(-33231);
else if(v[i]=='-')
s.push(-32321);
else if(v[i]==')')
{
int nr=s.top();
s.pop();
while(s.top()!=-33231)
{
if(s.top()==-31311)
{
s.pop();
nr+=s.top();
s.pop();
}
else if(s.top()==-32321)
{
s.pop();
nr=s.top()-nr;
s.pop();
}
}
s.pop();
if(s.top()==-22111) ///*
{
s.pop();
int prod=nr*s.top();
s.pop();
s.push(prod);
}
else if(s.top()==-32221) /// /
{
s.pop();
int cat=s.top()/nr;
s.pop();
s.push(cat);
}
else s.push(nr);
}
}
int nr=s.top();
s.pop();
while(s.top()!=-33231)
{
if(s.top()==-31311)
{
s.pop();
nr+=s.top();
s.pop();
}
else if(s.top()==-32321)
{
s.pop();
nr=s.top()-nr;
s.pop();
}
}
fout<<nr;
return 0;
}