Pagini recente » Cod sursa (job #328091) | Cod sursa (job #333945) | Cod sursa (job #1174585) | Cod sursa (job #906372) | Cod sursa (job #770730)
Cod sursa(job #770730)
#include <fstream>
#include <stack>
#include <queue>
#include <cstring>
using namespace std;
stack <char> stiva;
queue <int> coada;
stack <int> stiva2;
char x[200005];
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int i, nr=0;
f.getline(x, 200005);
int p=strlen(x);
for(i=0; i<p; i++)
{
bool ok=false;
while(isdigit(x[i]))
{
nr=nr*10+(x[i]-48);
ok=true;
i++;
}
if(ok)
{
coada.push(nr);
nr=0;
ok=false;
}
if(!isdigit(x[i]))
{
if(x[i]=='+' || x[i]=='-')
{
if(!stiva.empty())
{
if(stiva.top()=='+')
{
coada.push(1000000001);
stiva.pop();
stiva.push(x[i]);
}
else if(stiva.top()=='-')
{
coada.push(1000000002);
stiva.pop();
stiva.push(x[i]);
}
else
{
if(stiva.top()=='*')
{
coada.push(1000000003);
stiva.pop();
stiva.push(x[i]);
}
else if(stiva.top()=='/')
{
coada.push(1000000004);
stiva.pop();
stiva.push(x[i]);
}
else
stiva.push(x[i]);
//stiva.push(x[i]);
}
}
else
stiva.push(x[i]);
}
else if(x[i]=='*' || x[i]=='/')
{
if(!stiva.empty())
{
if(stiva.top()=='*')
{
coada.push(1000000003);
stiva.pop();
stiva.push(x[i]);
}
else if(stiva.top()=='/')
{
coada.push(1000000004);
stiva.pop();
stiva.push(x[i]);
}
else
stiva.push(x[i]);
}
else
stiva.push(x[i]);
}
else if(x[i]=='(')
stiva.push(x[i]);
else if(x[i]==')')
{
while(!stiva.empty() && stiva.top()!='(')
{
if(stiva.top()=='+')
coada.push(1000000001);
if(stiva.top()=='-')
coada.push(1000000002);
if(stiva.top()=='*')
coada.push(1000000003);
if(stiva.top()=='/')
coada.push(1000000004);
stiva.pop();
}
stiva.pop();
}
}
}
while(!stiva.empty())
{
if(stiva.top()=='+')
coada.push(1000000001);
if(stiva.top()=='-')
coada.push(1000000002);
if(stiva.top()=='*')
coada.push(1000000003);
if(stiva.top()=='/')
coada.push(1000000004);
stiva.pop();
}
while(!coada.empty())
{
if(coada.front()<=1000000000)
stiva2.push(coada.front());
else
{
if(coada.front()==1000000001)
{
int x1=stiva2.top();
stiva2.pop();
int x2=stiva2.top();
stiva2.pop();
stiva2.push(x1+x2);
}
if(coada.front()==1000000002)
{
int x1=stiva2.top();
stiva2.pop();
int x2=stiva2.top();
stiva2.pop();
stiva2.push(x2-x1);
}
if(coada.front()==1000000003)
{
int x1=stiva2.top();
stiva2.pop();
int x2=stiva2.top();
stiva2.pop();
stiva2.push(x1*x2);
}
if(coada.front()==1000000004)
{
int x1=stiva2.top();
stiva2.pop();
int x2=stiva2.top();
stiva2.pop();
stiva2.push(x2/x1);
}
}
coada.pop();
}
g<<stiva2.top();
}