Pagini recente » Cod sursa (job #1406462) | Cod sursa (job #2863858) | Cod sursa (job #2906126) | Cod sursa (job #289046) | Cod sursa (job #2975973)
#include <bits/stdc++.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char s[100001];
int caut(int st, int dr, char e1, char e2){
int nr = 0;
for(int i = dr;i >= st;i--){
if(s[i] == '(') nr++;
if(s[i] == ')') nr--;
if(nr == 0 && (s[i] == e1 || s[i] == e2)) return i;
}
return -1;
}
int number(int st, int dr){
int nr = 0;
for(int i = st;i <= dr; i++){
nr = nr * 10 + (s[i] - '0');
}
return nr;
}
int solve(int st, int dr){
int poz = caut(st, dr, '+', '-');
if(poz != -1){
int exp1 = solve(st, poz - 1);
int exp2 = solve(poz + 1, dr);
if(s[poz] == '+') return exp1 + exp2;
else return exp1 - exp2;
}
poz = caut(st, dr, '*', '/');
if(poz != -1){
int exp1 = solve(st, poz - 1);
int exp2 = solve(poz + 1, dr);
if(s[poz] == '*') return exp1 * exp2;
else return exp1 / exp2;
}
if(s[st] == '(' && s[dr] == ')') return solve(st + 1, dr - 1);
return number(st, dr);
}
int main() {
in.getline(s, 100001);
int n = strlen(s);
out << solve(0, n - 1);
return 0;
}