Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #798692) | Cod sursa (job #847359)
Cod sursa(job #847359)
#include <fstream>
using namespace std;
const int Nmax = 1000010;
char Str[Nmax];
int Act=0;
ifstream F("evaluare.in");
ofstream G("evaluare.out");
long Eval();
long Fact();
long Term();
long Eval()
{
long T=Fact();
while ( Str[Act] == '+' || Str[Act] == '-' )
{
char Sign = Str[Act++];
long T2 = Fact();
T = Sign == '+' ? T + T2 : T - T2;
}
return T;
}
long Fact()
{
long T=Term();
while ( Str[Act] == '*' || Str[Act] == '/' )
{
char Sign = Str[Act++];
long T2 = Term();
T = Sign == '*' ? T * T2 : T / T2;
}
return T;
}
long Term()
{
long Rez=0;
if ( Str[Act] == '(' )
{
++Act;
Rez=Eval();
++Act;
}
else
for ( ; Str[Act] >= '0' && Str[Act] <= '9' ; ++Act )
Rez = Rez * 10 + Str[Act] - '0';
return Rez;
}
int main()
{
F.getline(Str,Nmax, '\n' );
G<<Eval()<<'\n';
return 0;
}