Pagini recente » Cod sursa (job #2425582) | Cod sursa (job #3253340) | Cod sursa (job #2327447) | Cod sursa (job #854593) | Cod sursa (job #2030835)
#include <fstream>
#include <cstring>
#define in "evaluare.in"
#define out "evaluare.out"
#define N 100003
using namespace std;
ifstream fin(in);
ofstream fout(out);
char s[N],*p = s;
int n;
inline int expr();
inline int termen();
inline int factor();
inline int numar()
{
int A = 0;
int neg = 1;
if(*p == '-')
{
neg = -1;
++p;
}
while(*p >= '0' && *p <= '9')
{
A = A*10 + *p - '0';
++p;
}
return A*neg;
}
inline int expr()
{
int A = termen();
while(*p != ')')
{
if(*p == '+')
++p,A += termen();
else
++p,A -= termen();
}
++p;
return A;
}
inline int termen()
{
int A = factor();
while(*p == '*' or *p == '/')
{
if(*p == '*')
++p,A *= factor();
else ++p, A /= factor();
}
return A;
}
inline int factor()
{
if(*p == '(')
{
++p;
return expr();
}
return numar();
}
int main()
{
fin.getline(s,N);
n = strlen(s);
s[n] = ')';
s[n+1] = '\0';
fout<<expr()<<"\n";
fin.close(); fout.close();
return 0;
}