Pagini recente » Cod sursa (job #2031201) | Monitorul de evaluare | Cod sursa (job #3131345) | Cod sursa (job #3301994) | Cod sursa (job #787364)
Cod sursa(job #787364)
#include <fstream>
using namespace std;
const int Nmax = 100010;
char Str[Nmax], *p=Str; // p pointeaza la Str
ifstream F("evaluare.in");
ofstream G("evaluare.out");
long Eval();
long Term();
long Fact();
long Eval()
{
long Rez = Term();
while ( *p == '+' || *p == '-' )
switch( *p )
{
case '+':
++p;
Rez += Term();
break;
case '-':
++p;
Rez -= Term();
break;
}
return Rez;
}
long Term()
{
long Rez = Fact();
while ( *p == '*' || *p == '/' )
switch( *p )
{
case '*':
++p;
Rez *= Fact();
break;
case '/':
++p;
Rez /= Fact();
break;
}
return Rez;
}
long Fact()
{
long Rez = 0;
if ( *p == '(' )
{
++p;
Rez = Eval();
++p;
}
else
for ( ; *p >= '0' && *p <= '9' ; ++p )
Rez=Rez*10+ *p - '0';
return Rez;
}
int main()
{
F.getline(Str,Nmax,'\n');
G<<Eval()<<'\n';
}