Pagini recente » Cod sursa (job #1749695) | Cod sursa (job #1697354) | Cod sursa (job #2663140) | Cod sursa (job #2572467) | Cod sursa (job #2550098)
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char c;
int v[100000],res,sign=1,paranteza;
deque<int>termen[100000];
int x,j;
string s;
int etaj=1;
int main()
{
cin>>s;
int n=s.length();
int i=0;
while(i<n)
{
int t=0;
if(s[i]=='+')
{
x++;
v[x]=1;
i++;
}
else if(s[i]=='-')
{
x++;
v[x]=2;
i++;
}
else if(s[i]=='*')
{
x++;
v[x]=3;
i++;
}
else if(s[i]=='/')
{
x++;
v[x]=4;
i++;
}
else if(s[i]=='(')
{
x++;
v[x]=5;
i++;
}
else if(s[i]==')')
{
int sum = 0;
while(termen[etaj].size() > 1)
{
if(v[x]==1)
sum+=termen[etaj].back();
if(v[x]==2)
sum-=termen[etaj].back();
x--;
termen[etaj].pop_back();
}
sum+=termen[etaj].back();
termen[etaj].pop_back();
etaj--;
if(v[x]==3)
{
termen[etaj].back()*=sum;
}
else if(v[x]==4)
{
termen[etaj].back()/=sum;
}
else
termen[etaj].push_back(sum);
i++;
}
else{
while('0'<=s[i] && s[i]<='9')
{
t=t*10+s[i]-'0';
i++;
}
if(t!=0)
{
if(v[x]==3)
{
termen[etaj].back() *= t;
x--;
}
else if(v[x]==4)
{
termen[etaj].back()/=t;
x--;
}
else if(v[x]==1)
{
termen[etaj].push_back(t);
}
else if(v[x]==2)
{
termen[etaj].push_back(t);
}
else if(v[x]==0)
{
termen[etaj].push_back(t);
}
else
{
etaj++;
termen[etaj].push_back(t);
x--;
}
}}
}
int sum = 0;
while(termen[etaj].size() > 1)
{
if(v[x]==1)
sum+=termen[etaj].back();
if(v[x]==2)
sum-=termen[etaj].back();
x--;
termen[etaj].pop_back();
}
sum+=termen[etaj].back();
termen[etaj].pop_back();
cout<<sum;
return 0;
}