Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Diferente pentru voluntari intre reviziile 7 si 8 | Cod sursa (job #1770996) | Cod sursa (job #847353)
Cod sursa(job #847353)
#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 T1=Fact();
if ( Str[Act] == '+' || Str[Act] == '-' )
{
char Sign = Str[Act++];
long T2 = Fact();
return T1 + ( Sign == '+' ? 1 : -1 ) * T2;
}
else return T1;
}
long Fact()
{
long T1=Term();
if ( Str[Act] == '*' || Str[Act] == '/' )
{
char Sign = Str[Act++];
long T2 = Term();
return Sign == '*' ? T1 * T2 : T1 / T2;
}
else
return T1;
}
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;
}