Pagini recente » Cod sursa (job #503098) | Cod sursa (job #2312339) | Cod sursa (job #293135) | Cod sursa (job #2908734) | Cod sursa (job #1861299)
#include <fstream>
#include <cctype>
#define ll long long
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
const int dim = 100010;
char s[dim];
char *p = s;
bool ok;
ll Evaluare(); // evalueaza rezultatul unei expresii/subexpresii
ll Termen(); // returneaza un termen
ll Factor(); // returneaza un factor
int main()
{
fin.getline(s, dim);
fout << Evaluare();
fin.close();
fout.close();
}
ll Evaluare()
{
ll r = Termen();
while ( *p == '+' || *p == '-' )
{
switch ( *p )
{
case '+' :
p++;
r += Termen();
break;
case '-' :
p++;
r -= Termen();
break;
}
}
return r;
}
ll Termen()
{
ll r = Factor();
while ( *p == '*' || *p == '/' )
switch ( *p )
{
case '*' :
p++;
r *= Factor();
break;
case '/' :
p++;
r /= Factor();
break;
}
return r;
}
ll Factor()
{
ll r(0);
if ( *p == '(' )
{
p++;
r = Evaluare();
p++;
}
else
while ( isdigit(*p) )
{
r = r * 10 + (*p - '0');
p++;
}
return r;
}