Pagini recente » Cod sursa (job #3032364) | Cod sursa (job #2019) | Cod sursa (job #4289) | Cod sursa (job #3203973) | Cod sursa (job #353116)
Cod sursa(job #353116)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 100100
#define fin "evaluare.in"
#define fout "evaluare.out"
char buff[NMAX], *p;
int eval();
int fact();
int termen();
int termen()
{
int ret = 0;
if ( *p == '(' )
++p, ret = eval(), ++p;
else
while ( '0' <= *p && *p <= '9' )
ret = ret * 10 + *p - '0', ++p;
return ret;
}
int fact()
{
int ret = termen();
while ( *p == '*' || *p == '/' )
{
if ( *p == '*' )
++p, ret *= termen();
else
++p, ret /= termen();
}
return ret;
}
int eval()
{
int ret = fact();
while ( *p == '+' || *p == '-' )
{
if ( *p == '+' )
++p, ret += fact();
else
++p, ret -= fact();
}
return ret;
}
int main()
{
ifstream f1(fin);
ofstream f2(fout);
f1.getline(buff, NMAX);
p = buff;
f2 << eval() << endl;
return 0;
}