Cod sursa(job #694447)
Utilizator | Data | 27 februarie 2012 21:05:31 | |
---|---|---|---|
Problema | Evaluarea unei expresii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 3.58 kb |
#include <fstream>
#include <stack>
using namespace std;
stack<int> nr;
stack<char> op;
char s[100003];
int i,n1,n2;
int main ()
{ifstream f("evaluare.in");
ofstream g("evaluare.out");
f.getline(s,100002);
nr.push(0);
op.push(0);
for(i=0;s[i];i++)
{
if('0'<=s[i]&&s[i]<='9'){
while('0'<=s[i]&&s[i]<='9')
{n1=n1*10+s[i]-'0'; i++;}
nr.push(n1);
n1=0;
i--;
}
else
if(s[i]=='+'||s[i]=='-')
{while(op.top()=='+'||op.top()=='-'||op.top()=='*'||op.top()=='/')
if(op.top()=='+')
{n2=nr.top();
nr.pop();
nr.top()+=n2;
op.pop();}
else
if(op.top()=='-')
{n2=nr.top();
nr.pop();
nr.top()-=n2;
op.pop();}
else
if(op.top()=='*')
{n2=nr.top();
nr.pop();
nr.top()*=n2;
op.pop();}
else
if(op.top()=='/')
{n2=nr.top();
nr.pop();
nr.top()/=n2;
op.pop();}
op.push(s[i]);
}
else
if(s[i]=='*'||s[i]=='/')
{if(op.top()=='*')
{n2=nr.top();
nr.pop();
nr.top()*=n2;
op.pop();}
else
if(op.top()=='/')
{n2=nr.top();
nr.pop();
nr.top()/=n2;
op.pop();}
op.push(s[i]);
}
else
if(s[i]==')')
{while(op.top()!='(')
if(op.top()=='+')
{n2=nr.top();
nr.pop();
nr.top()+=n2;
op.pop();}
else
if(op.top()=='-')
{n2=nr.top();
nr.pop();
nr.top()-=n2;
op.pop();}
else
if(op.top()=='*')
{n2=nr.top();
nr.pop();
nr.top()*=n2;
op.pop();}
else
if(op.top()=='/')
{n2=nr.top();
nr.pop();
nr.top()/=n2;
op.pop();}
op.pop();}
else
op.push('(');
}
while(op.top()!=0)
{
if(op.top()=='+')
{n2=nr.top();
nr.pop();
nr.top()+=n2;
op.pop();}
else
if(op.top()=='-')
{n2=nr.top();
nr.pop();
nr.top()-=n2;
op.pop();}
else
if(op.top()=='*')
{n2=nr.top();
nr.pop();
nr.top()*=n2;
op.pop();}
else
if(op.top()=='/')
{n2=nr.top();
nr.pop();
nr.top()/=n2;
op.pop();}
}
g<<nr.top();
f.close(); g.close();
return 0;
}