Pagini recente » Cod sursa (job #297859) | Rating Geana Vlad (MihaiViteazul_Voinea_Geana) | Cod sursa (job #2785317) | Cod sursa (job #92847) | Cod sursa (job #2710137)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
long long ordine(char op){
if(op == '+' || op == '-')
return 1;
else if(op == '*' || op == '/')
return 2;
else
return 0;
}
long long operatii(long long a, long long b, char op){
if(op == '+')
return a + b;
if(op == '-')
return a - b;
if(op == '*')
return a * b;
if(op == '/')
return a / b;
}
stack <long long> values;
stack <char> ops;
long long i;
string s;
int main()
{
fin>>s;
for(i=0;i<s.length();i++){
if(s[i] == '(')
ops.push(s[i]);
else if(isdigit(s[i])){
long long val = 0;
while(i < s.length() && isdigit(s[i])){
val = (val * 10) + (s[i] - '0');
i++;
}
values.push(val);
i--;
}
else if(s[i] == ')'){
while(ops.empty() == false && ops.top() != '('){
long long val1 = 0;
long long val2 = 0;
val2 = values.top();
values.pop();
if(values.empty() == false){
val1 = values.top();
values.pop();
}
char op = ops.top();
ops.pop();
values.push(operatii(val1,val2,op));
}
if(!ops.empty())
ops.pop();
}
else{
while(ops.empty() == false && ordine(ops.top()) >= ordine(s[i])){
long long val1 = 0;
long long val2 = 0;
val2 = values.top();
values.pop();
if(values.empty() == false){
val1 = values.top();
values.pop();
}
char op = ops.top();
ops.pop();
values.push(operatii(val1,val2,op));
}
ops.push(s[i]);
}
}
while(ops.empty() == false){
long long val2 = values.top();
values.pop();
long long val1 = values.top();
values.pop();
char op = ops.top();
ops.pop();
values.push(operatii(val1,val2,op));
}
fout << values.top();
return 0;
}