Pagini recente » Cod sursa (job #2862784) | Cod sursa (job #244741) | Cod sursa (job #2058250) | Cod sursa (job #2234249) | Cod sursa (job #597114)
Cod sursa(job #597114)
#include <fstream>
using namespace std;
string s;
int s2i(int left, int right)
{
int t=0;
for (int i=left; i<=right; i++)
t=t*10+s[i]-'0';
return t;
}
int eval(int left, int right, int r)
{
int i,p1,p2,pp;
p1=p2=pp=0;
for (i=left; i<=right; i++)
if (s[i]=='(') pp++;
else if (s[i]==')') pp--;
else if (pp==0)
{
if (s[i]=='+') return eval(left, i-1,1)+eval(i+1,right,1)*r; else
if (s[i]=='-') return eval(left, i-1,1)-eval(i+1,right,-1)*r; else
if (s[i]=='*') p1=i; else
if (s[i]=='/') p2=i;
}
if (p1>p2) return eval(left,p1-1,1)*eval(p1+1,right,1); else
if (p2>0) return eval(left,p2-1,1)/eval(p2+1,right,1); else
if (s[left]=='(') return eval(left+1,right-1,1); else
return s2i(left,right);
}
int main()
{
ifstream f("evaluare.in");
ofstream g("evaluare.out");
f >> s;
g << eval(0,s.size()-1,1);
return 0;
}