Pagini recente » Cod sursa (job #847652) | Cod sursa (job #723183) | Cod sursa (job #2183260) | Cod sursa (job #1482175) | Cod sursa (job #3294166)
#include <bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
const int MAX_LEN = 100'000;
char s[MAX_LEN + 1];
int p, n;
void Citire();
int Factor();
int Termen();
int Evaluare();
void Citire() {
f.getline(s, MAX_LEN);
n = strlen(s);
}
int Factor() {
int f;
if (s[p] == '(') {
p++;
f = Evaluare();
p++;
}
else {
f = 0;
while (s[p] >= '0' && s[p] <= '9') {
f = f * 10 + (s[p] - '0');
p++;
}
}
return f;
}
int Termen() {
int t = Factor();
while (p < n && (s[p] == '*' || s[p] == '/')) {
p++;
if (s[p - 1] == '*')
t *= Factor();
else
t /= Factor();
}
return t;
}
int Evaluare() {
int r = Termen();
while (p < n && (s[p] == '+' || s[p] == '-')) {
p++;
if (s[p - 1] == '+')
r += Termen();
else
r -= Termen();
}
return r;
}
int main() {
Citire();
g << Evaluare() << "\n";
f.close();
g.close();
return 0;
}