Pagini recente » Cod sursa (job #295552) | Cod sursa (job #578087) | Cod sursa (job #951680) | Cod sursa (job #295532) | Cod sursa (job #2229068)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
stack<char>rat;
stack<int>tori;
char infix[100005];
int n;
int prioritet(char op){
if(op=='+') return 1;
if(op=='-') return 1;
if(op=='*') return 2;
if(op=='/') return 2;
return 0;
}
int resh(int a, int b, char op){
if(op=='*') return a*b;
if(op=='+') return a+b;
if(op=='/') return a/b;
if(op=='-') return a-b;
}
int main (){
fin.get(infix,100005);
n = strlen(infix);
int i = 0;
while(i<n){
char curent = infix[i];
if(curent>47 && curent<58){
int num = 0;
while(curent>47 && curent<58){
num = num*10+(curent-'0');
i++;
curent = infix[i];
}
i--;
curent=infix[i];
tori.push(num);
}
else if(curent == '(') rat.push('(');
else if(curent == ')'){
while(rat.top()!='('){
int v1 = tori.top();
tori.pop();
int v2 = tori.top();
tori.pop();
char c = rat.top();
rat.pop();
tori.push(resh(v1,v2,c));
}
rat.pop();
}
else{
while(!rat.empty() && (prioritet(rat.top())>prioritet(curent))){
int v1 = tori.top();
tori.pop();
int v2 = tori.top();
tori.pop();
char c = rat.top();
rat.pop();
tori.push(resh(v1,v2,c));
}
rat.push(curent);
}
i++;
}
while(!rat.empty()){
int v1 = tori.top();
tori.pop();
int v2 = tori.top();
tori.pop();
char c = rat.top();
rat.pop();
tori.push(resh(v1,v2,c));
}
fout<<tori.top();
return 0;
}