Pagini recente » Cod sursa (job #1918797) | Cod sursa (job #572086) | Cod sursa (job #1067308) | Cod sursa (job #910716) | Cod sursa (job #1417037)
#include<fstream>
#include<iostream>
using namespace std;
#define MAX 100001
char s[MAX];
ifstream in("evaluare.in");
ofstream out("evaloare.out");
char operators[3][3]={"+-","*/",""};
char *p=0;
int eval(int level);
int operation(int level,int nr,int &a,int b)
{
if(level==0)
{
if(nr==0)
a+=b;
else if(nr==1)
a-=b;
}
else if(level==1)
{
if(nr==0)
a*=b;
else
a/=b;
}
return a;
}
int op()
{
int x=0;
if(*p>='0' && *p<='9')
{
while(*p>='0' && *p<='9')
{
x=x*10 + *p-'0';
++p;
}
}
else
if(*p=='(')
{
++p;x=eval(0);++p;
}
return x;
}
int eval(int level)
{
int x=0;
if(level+1<=1)
x=eval(level+1);
else
x=op();
while(*p==operators[level][0] || *p==operators[level][1])
{
if(*p==operators[level][0])
{
++p;
if(level+1<=1)
operation(level,0,x,eval(level+1));
else
operation(level,0,x,op());
}
else if(*p==operators[level][1])
{
++p;
if(level+1<=1)
operation(level,1,x,eval(level+1));
else
operation(level,1,x,op());
cout<<operators[level][1];
}
}
return x;
}
int main()
{
in>>s;
p=s;
out<<eval(0);
return 0;
}