Pagini recente » Borderou de evaluare (job #1384225) | Cod sursa (job #2737104)
#include <fstream>
#include <cstring>
using namespace std;
const int NMAX = 100000;
int p, N;
char s[NMAX + 5];
int factor(), expr(), termen();
int expr() {
int x = termen();
while (p <= N && (s[p] == '+' || s[p] == '-')) {
++p;
if (s[p - 1] == '+')
x += termen();
else
x -= termen();
}
return x;
}
int termen() {
int x = factor();
while (p <= N && (s[p] == '*' || s[p] == '/')) {
++p;
if (s[p - 1] == '*')
x *= factor();
else
x /= factor();
}
return x;
}
int factor() {
int x = 0;
if (s[p] == '(') {
++p;
x = expr();
++p;
}
else {
while (p <= N && ('0' <= s[p] && s[p] <= '9')) {
x = x * 10 + (s[p] - '0');
++p;
}
}
return x;
}
int main() {
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin >> (s + 1);
p = 1;
N = strlen(s + 1);
fout << expr() << "\n";
fin.close();
fout.close();
return 0;
}