Pagini recente » Cod sursa (job #2261283) | Cod sursa (job #783384) | Cod sursa (job #1173622) | Cod sursa (job #2480729) | Cod sursa (job #1673545)
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char S[100010];
char *p=S;
char operand[4][4] = {"+-", "*/", "^", ""};
const long hmax = 2;
void Read()
{
fin.getline(S,100010);
}
int operatie(int x,int y,char c)
{
switch ( c )
{
case '+': return x+y;
case '-': return x-y;
case '*': return x*y;
case '/': return x/y;
}
return 0;
}
int eval(int);
int element()
{
int r=0;
if ( *p == '(' )
{ ++p; r = eval(0); ++p; }
else
{
while ( strchr("0123456789", *p) )
r = r*10 + *(++p-1) - '0';
}
return r;
}
int eval(int h)
{
int r = (h==hmax)?element():eval(h+1);
while ( strchr(operand[h], *p) )
r = operatie(r, eval(h+1), *(++p-1));
return r;
}
void Print()
{
fout<<eval(0)<<"\n";
}
int main()
{
Read();
Print();
fin.close();
fout.close();
return 0;
}