Pagini recente » Cod sursa (job #2623980) | Statistici DianaPopescu (PopescuDianaMaria) | Cod sursa (job #1999358) | Cod sursa (job #1081377) | Cod sursa (job #2254370)
#include <bits/stdc++.h>
using namespace std;
FILE *fin = fopen ("evaluare.in", "r"), *fout = fopen ("evaluare.out", "w");
const int BUFFER = 1e5;
char s[BUFFER + 1];
int p; // pointer
int eval ();
int fact () {
int semn, nr;
semn = 1;
nr = 0;
if (s[p] == '-') {
semn = -semn;
p++;
}
if (s[p] == '(') {
p++;
nr = eval ();
p++;
return nr * semn;
}
else {
while (isdigit (s[p])) {
nr = nr * 10 + s[p] - '0';
p++;
}
return nr * semn;
}
}
int term () {
int sum = fact ();
while (s[p] == '/' || s[p] == '*') {
if (s[p] == '/') {
p++;
sum = sum / term ();
}
else {
p++;
sum = sum * term ();
}
}
return sum;
}
int eval () {
int sum = term ();
while (s[p] == '+' || s[p] == '-') {
if (s[p] == '+') {
p++;
sum = sum + term ();
}
else {
p++;
sum = sum - term ();
}
}
return sum;
}
int main() {
fscanf (fin, "%s", &s);
p = 0;
fprintf (fout, "%d", eval ());
return 0;
}