Pagini recente » Cod sursa (job #1772373) | Cod sursa (job #2601495) | Cod sursa (job #2394222) | Cod sursa (job #2308292) | Cod sursa (job #1451852)
#include <stdio.h>
#include <vector>
#include <string.h>
#include <stdlib.h>
#define MAX 100000
using namespace std;
int eval();
vector<char> s;
int v[MAX], n;
char* expr = (char*)malloc(MAX);
int main(){
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", expr);
int x = 0, i;
n = 0;
for(i = 0; i < strlen(expr); i++){
if('0' <= expr[i] && expr[i] <= '9')
x = 10 * x + expr[i] - '0';
else{
if(i > 0 && '0' <= expr[i - 1] && expr[i - 1] <= '9'){
v[n++] = x;
x = 0;
}
if(expr[i] == '(')
s.push_back(expr[i]);
if(expr[i] == ')'){
while(s.back() != '('){
v[n++] = s.back() - 48;
s.pop_back();
}
s.pop_back();
}
if(expr[i] == '*' || expr[i] == '/'){
while(!s.empty() && (s.back() == '*' || s.back() == '/')){
v[n++] = s.back() - 48;
s.pop_back();
}
s.push_back(expr[i]);
}
if(expr[i] == '+' || expr[i] == '-'){
while(!s.empty() && s.back() != '('){
v[n++] = s.back() - 48;
s.pop_back();
}
s.push_back(expr[i]);
}
}
}
if(x != 0)
v[n++] = x;
while(!s.empty()){
v[n++] = s.back() - 48;
s.pop_back();
}
printf("%d\n", eval());
return 0;
}
int eval(){
int i, rez = 0, a, b;
vector<int> s;
for(i = 0; i < n; i++){
if(v[i] >= 0)
s.push_back(v[i]);
else{
b = s.back();
s.pop_back();
a = s.back();
s.pop_back();
switch(v[i]){
case -6: rez = a * b; break;
case -5: rez = a + b; break;
case -3: rez = a - b; break;
case -1: rez = a / b; break;
}
s.push_back(rez);
}
}
return s.back();
}