Cod sursa(job #2492477)
Utilizator | Data | 14 noiembrie 2019 20:04:40 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 30 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 4.78 kb |
#include <fstream>
#include <stack>
using namespace std;
ifstream in ("evaluare.in");
ofstream out ("evaluare.out");
int i, s;
char e[100000];
stack<char>semn;
stack<int>num;
int main()
{
in.getline(e, 100000);
while(e[i]!='\0')
{
int nr=0;
if(e[i]=='+'||e[i]=='-'||e[i]=='*'||e[i]=='/')
{
char c;
if(!semn.empty())
c=semn.top();
else
c=0;
if(c=='+' && e[i]=='+')
{
nr=num.top();
num.pop();
nr+=num.top();
num.pop();
num.push(nr);
}
else if(c=='+' && e[i]=='-')
{
nr=num.top();
num.pop();
nr+=num.top();
num.pop();
semn.pop();
semn.push(e[i]);
num.push(nr);
}
else if(c=='-' && (e[i]=='-' || e[i]=='+'))
{
nr=num.top();
num.pop();
nr-=num.top();
num.pop();
nr*=-1;
semn.pop();
semn.push(e[i]);
num.push(nr);
}
else if(c=='*' && e[i]=='*')
{
nr=num.top();
num.pop();
nr*=num.top();
num.pop();
num.push(nr);
}
else if(c=='*' && (e[i]=='/' || e[i]=='+' || e[i]=='-'))
{
nr=num.top();
num.pop();
nr*=num.top();
num.pop();
semn.pop();
semn.push(e[i]);
num.push(nr);
}
else if(c=='/' && (e[i]=='*' || e[i]=='+' || e[i]=='-'))
{
int _1=num.top();
num.pop();
nr=num.top()/_1;
num.pop();
semn.pop();
semn.push(e[i]);
num.push(nr);
}
else if(c=='/' && e[i]=='/')
{
nr=num.top();
num.pop();
nr/=num.top();
num.pop();
num.push(nr);
}
else
{
semn.push(e[i]);
}
}
else if(e[i]==')')
{
char c=semn.top();
while(c!='(')
{
if(c=='/')
{
int _1=num.top();
num.pop();
nr=num.top()/_1;
num.pop();
num.push(nr);
}
else if(c=='-')
{
nr=num.top();
num.pop();
nr-=num.top();
num.pop();
nr*=-1;
num.push(nr);
}
else if(c=='+')
{
nr=num.top();
num.pop();
nr+=num.top();
num.pop();
num.push(nr);
}
else if(c=='*')
{
nr=num.top();
num.pop();
nr*=num.top();
num.pop();
num.push(nr);
}
semn.pop();
c=semn.top();
}
}
else if(e[i]=='(')
{
semn.push(e[i]);
}
else
{
int somn=0;
while(e[i]>='0' && e[i]<='9')
{
somn=somn*10+(int)e[i]-48;
i++;
}
i--;
num.push(somn);
}
i++;
}
int nr;
while(!semn.empty())
{
char c=semn.top();
if(c=='/')
{
int _1=num.top();
num.pop();
nr=num.top()/_1;
num.pop();
num.push(nr);
}
else if(c=='-')
{
nr=num.top();
num.pop();
nr-=num.top();
num.pop();
nr*=-1;
num.push(nr);
}
else if(c=='+')
{
nr=num.top();
num.pop();
nr+=num.top();
num.pop();
num.push(nr);
}
else if(c=='*')
{
nr=num.top();
num.pop();
nr*=num.top();
num.pop();
num.push(nr);
}
semn.pop();
}
s=num.top();
out << s;
return 0;
}