Pagini recente » Cod sursa (job #1672931) | Cod sursa (job #217114) | Cod sursa (job #161554) | Cod sursa (job #889900) | Cod sursa (job #145948)
Cod sursa(job #145948)
#include<fstream>
using namespace std;
char s[100005];
int grad(char ch){
if(ch == '+' || ch=='-')
return 1;
return 2;
}
int eval(int li, int lf){
int par = 0, poz = -1, minim = 3;
for(int i=li;i<=lf;i++)
if(s[i] == '(')
par++;
else
if(s[i] == ')')
par--;
else
if('0' <= s[i] && s[i] <= '9');
else
if(par == 0 && grad(s[i]) <= minim){
minim = grad(s[i]);
poz = i;
}
if(poz == -1){
if(s[li] == '(')
return eval(li+1,lf-1);
else{
int val = 0;
for(int i=li;i<=lf;i++)
val = val*10 + s[i] - '0';
return val;
}
}
if(s[poz] == '-')
return eval(li,poz-1) - eval(poz+1,lf);
else
if(s[poz] == '+')
return eval(li,poz-1) + eval(poz+1,lf);
else
if(s[poz] == '*')
return eval(li,poz-1) * eval(poz+1,lf);
return eval(li,poz-1) / eval(poz+1,lf);
}
int main(){
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin>>s;
fout<<eval(0,strlen(s)-1)<<"\n";
fin.close();
fout.close();
return 0;
}