Pagini recente » Cod sursa (job #1198994) | Cod sursa (job #2017605) | Cod sursa (job #722317) | Cod sursa (job #2941176) | Cod sursa (job #145966)
Cod sursa(job #145966)
#include<fstream>
using namespace std;
char s[100005];
int nr[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=lf;i>=li;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(minim == 1)
break;
}
if(poz == -1){
if(s[li] == '(')
return eval(li+1,lf-1);
else
return nr[li];
}
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;
int k = -1;
for(int i=0;s[i];i++)
if('0' <= s[i] && s[i] <= '9'){
int j = i;
k++;
nr[k] = 0;
while(s[j] && '0' <= s[j] && s[j] <= '9'){
nr[k] = nr[k] * 10 + s[j] - '0';
j++;
}
i=j-1;
s[k] = '1';
}
else
s[++k] = s[i];
s[k+1]= 0;
fout<<eval(0,strlen(s)-1)<<"\n";
fin.close();
fout.close();
return 0;
}