Pagini recente » Cod sursa (job #97182) | Cod sursa (job #817489) | Cod sursa (job #142184) | Cod sursa (job #2631594) | Cod sursa (job #1483499)
#include <bits/stdc++.h>
using namespace std;
stack <int> nums;
stack <char> ops;
void operation()
{
char op=ops.top(); ops.pop();
int b=nums.top(); nums.pop();
int a=nums.top(); nums.pop();
if(op=='+') nums.push(a+b);
else if(op=='-') nums.push(a-b);
else if(op=='*') nums.push(a*b);
else if(op=='/') nums.push(a/b);
}
int priority(char op)
{
if(op=='+' || op=='-') return 1;
if(op=='/' || op=='*') return 2;
return 0;
}
void solve(string s)
{
int i, p, x;
ops.push('1');
for(i=0; i<s.size(); i++)
{
if(s[i]=='(') ops.push(s[i]);
else if(s[i]==')')
{
while(ops.top()!='(') operation();
ops.pop();
}
else
{
p=priority(s[i]);
if(p)
{
while(priority(ops.top())>=p) operation();
ops.push(s[i]);
}
else
{
for(x=0; isdigit(s[i]); i++)
x=x*10+(s[i]-'0');
nums.push(x);
i--;
}
}
}
while(ops.size()>1) operation();
}
int main()
{
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
string s;
fin >> s;
solve(s);
fout << nums.top();
fin.close();
fout.close();
return 0;
}