Cod sursa(job #1259497)
Utilizator | Data | 10 noiembrie 2014 07:37:29 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.9 kb |
#include<fstream>
#include<string>
#include<stack>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
ifstream si;
si.open("evaluare.in");
ofstream so;
so.open("evaluare.out");
stack<int> o;
string s;
si>>s;
int i;
char a;
int n=s.length();
char p[2*n];
int m=0;
for(i=0;i<n;++i)
{
if('0'<=s[i]&&s[i]<='9')
{
while('0'<=s[i]&&s[i]<='9'&&i<n)
{
p[m]=s[i];
++m;
++i;
}
p[m]='.';
++m;
--i;
}
else
{
if(s[i]!=')')
{
if(o.size()>0)
{
if(s[i]=='*'||s[i]=='/')
if(o.top()=='*'||o.top()=='/')
{
a=o.top();
o.pop();
o.push(s[i]);
p[m]=a;
++m;
}
else
o.push(s[i]);
else
if(s[i]=='+'||s[i]=='-')
{
if(o.top()!='(')
{
a=o.top();
o.pop();
o.push(s[i]);
p[m]=a;
++m;
}
else
o.push(s[i]);
}
else
o.push(s[i]);
}
else
o.push(s[i]);
}
else
{
while(o.top()!='(')
{
p[m]=o.top();
++m;
o.pop();
}
o.pop();
}
}
}
while(o.size()>0)
{
p[m]=o.top();
++m;
o.pop();
}
int x,c,b;
// for(i=0;i<m;++i)
// cout<<p[i];
stack<int> k;
for(i=0;i<m;++i)
{
if('0'<=p[i]&&p[i]<='9')
{
x=0;
while(p[i]!='.'&&i<m)
{
x=x*10+p[i]-'0';
++i;
}
k.push(x);
}
else
{
c=k.top();
k.pop();
b=k.top();
k.pop();
switch(p[i])
{
case '+': k.push(b+c); break;
case '/': k.push(b/c); break;
case '-': k.push(b-c); break;
case '*': k.push(b*c); break;
}
}
}
so<<k.top();
}