Pagini recente » Cod sursa (job #1578568) | Cod sursa (job #1079073) | Monitorul de evaluare | Cod sursa (job #124475) | Cod sursa (job #3030747)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
string s;
int p;
int expresie();
int termen();
int factor();
int expresie() {
int nr = termen();
while (s[p] == '+' || s[p] == '-') {
if (s[p] == '+') {
++p;
nr += termen();
}
else {
++p;
nr -= termen();
}
}
return nr;
}
int termen() {
int nr = factor();
while (s[p] == '*' || s[p] == '/') {
if (s[p] == '*') {
++p;
nr *= factor();
}
else {
++p;
nr /= factor();
}
}
return nr;
}
int factor() {
if (s[p] == '(') {
++p;
int nr = expresie();
++p;
return nr;
}
else {
int semn = 1;
while (s[p] == '-') {
semn = -semn;
++p;
}
int nr = 0;
while (isdigit(s[p])) {
nr = nr * 10 + (s[p] - '0');
++p;
}
return nr * semn;
}
}
int main() {
fin >> s;
fout << expresie();
return 0;
}