Pagini recente » Cod sursa (job #2167878) | Borderou de evaluare (job #1170011) | Cod sursa (job #3001110) | Cod sursa (job #915508) | Cod sursa (job #623127)
Cod sursa(job #623127)
#include <fstream>
using namespace std;
ifstream in ("evaluare.in");
ofstream out ("evaluare.out");
const int N = 100003;
char s[N], *p;
void citire () {
in.getline (s, N);
p = s;
}
int expresie ();
int termen ();
int factor ();
int expresie () {
int sum = termen () ;
while ( *p == '+' || *p == '-' ) {
++p;
if (*(p-1) == '+') {
sum += termen ();
} else {
sum -= termen ();
}
}
return sum;
}
int termen () {
int prod = factor ();
while (*p == '*' || *p == '/') {
++p;
if (*(p-1) == '*') {
prod *= factor ();
} else {
prod /= factor ();
}
}
return prod;
}
int factor () {
int val = 0;
if (*p == '(') {
++p;
val = expresie ();
++p;
return val;
}
if (*p == '-') {
val = -1;
++p;
}
while (*p >= '0' && *p <= '9') {
val = val * 10 + (*p - '0');
++p;
}
return val;
}
int main () {
citire ();
out << expresie () << '\n';
return 0;
}