Pagini recente » Cod sursa (job #2621823) | Cod sursa (job #466953) | Cod sursa (job #3239060) | Cod sursa (job #2329996) | Cod sursa (job #2823527)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int DMAX = 1e6+10;
struct arbore{
int val;
char op;
arbore *st,*dr;
}*start;
char s[DMAX];
char op[3][3]={"+-","*/"};
int pos,lg;
arbore* expresie(int prioritate){
arbore *x,*y;
if(prioritate == 2){
if(s[pos] == '('){
pos++;
x=expresie(0);
pos++;
}
else{
x=new arbore();
while(s[pos] >= '0' && s[pos] <= '9'){
x->val=x->val*10 + s[pos]-'0';
pos++;
}
}
}
else{
x=expresie(prioritate+1);
while(strchr(op[prioritate],s[pos]) && pos < lg){
y=new arbore();
y->val=0;
y->op=s[pos++];
y->st=x;
y->dr=expresie(prioritate+1);
x=y;
}
}
return x;
}
int dfs(arbore *node){
if(node->op == '+')
return dfs(node->st)+dfs(node->dr);
else if(node->op == '-')
return dfs(node->st)-dfs(node->dr);
else if(node->op == '*')
return dfs(node->st)*dfs(node->dr);
else if(node->op == '/')
return dfs(node->st)/dfs(node->dr);
else
return node->val;
}
int main(){
fin>>s;
lg=strlen(s);
start=expresie(0);
fout<<dfs(start)<<'\n';
return 0;
}