Pagini recente » Cod sursa (job #506665) | Cod sursa (job #2047908) | Cod sursa (job #1400857) | Cod sursa (job #1239701) | Cod sursa (job #2302948)
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
istream & in = fin;
ostream & out = fout;
string s;
int GetPriority(char c)
{
if(c == '+' || c == '-'){
return 0;
}else if(c == '*' || c == '/'){
return 1;
}
}
bool IsDigit(char c)
{
return (c >= '0' && c <= '9');
}
int Eval(int lt, int rt)
{
int last = -1, priority = 100;
int depth = 0;
for(int i = lt; i < rt; i++){
if(s[i] == '('){
depth++;
}else if(s[i] == ')'){
depth--;
}else if(!IsDigit(s[i]) && depth == 0 && priority >= GetPriority(s[i])){
last = i;
priority = GetPriority(s[i]);
}
}
if(last != -1){
if(s[last] == '+'){
return Eval(lt, last) + Eval(last+1, rt);
}else if(s[last] == '-'){
return Eval(lt, last) - Eval(last+1, rt);
}else if(s[last] == '*'){
return Eval(lt, last) * Eval(last+1, rt);
}else if(s[last] == '/'){
return Eval(lt, last) / Eval(last+1, rt);
}
}else{
if(s[lt] == '(' && s[rt-1] == ')'){
return Eval(lt+1, rt-1);
}else{
int a = 0;
for(int i = lt; i < rt; i++){
a *= 10;
a += (s[i]-'0');
}
return a;
}
}
}
int main()
{
in >> s;
out << Eval(0, s.size());
return 0;
}