Cod sursa(job #1249315)
Utilizator | Data | 26 octombrie 2014 20:00:41 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.64 kb |
#include<fstream>
#include<iostream>
#include<stack>
using namespace std;
int x[100000];
int c[100000];
int main()
{
ifstream si;
si.open("evaluare.in");
ofstream so;
so.open("evaluare.out");
string s="(";
char a;
while(si>>a)
s+=a;
s+=')';
int n=s.length(),z;
int i,d,e,f,m=0,p=0;
for(i=0;i<n;++i)
{
if('0'<=s[i]&&s[i]<='9')
{
z=0;
while('0'<=s[i]&&s[i]<='9')
{
z=z*10+s[i]-'0';
++i;
}
--i;
x[m]=z;
++m;
}
else
{
if(s[i]!=')')
{
c[p]=s[i];
++p;
}
else
{
--p;
while(c[p]!='(')
{
a=c[p];
--p;
--m;
d=x[m];
--m;
e=x[m];
if(c[p]=='*')
{
--p;
--m;
f=x[m];
switch(a)
{
case '+': x[m]=f*e+d;++m;break;
case '-': x[m]=f*e-d;++m;break;
case '*': x[m]=f*e*d;++m;break;
case '/': x[m]=f*e/d;++m;break;
}
}
else
{
if(c[p]=='/')
{
--p;
--m;
f=x[m];
switch(a)
{
case '+': x[m]=f/e+d;++m;break;
case '-': x[m]=f/e-d;++m;break;
case '*': x[m]=f/e*d;++m;break;
case '/': x[m]=f/e/d;++m;break;
}
}
else
{
switch(a)
{
case '+': x[m]=e+d;++m;break;
case '-': x[m]=e-d;++m;break;
case '*': x[m]=e*d;++m;break;
case '/': x[m]=e/d;++m;break;
}
}
}
}
--p;
}
}
}
so<<x[0];
}