Pagini recente » Cod sursa (job #368470) | Cod sursa (job #373278) | Cod sursa (job #1725570) | Cod sursa (job #1254597) | Cod sursa (job #3192652)
#include <fstream>
#include <cstring>
#include <ctype.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
int pos;
/// recursivitate indirecta - declaram functiile inainte
int add(); /// se ocupa de + si -
int mult(); /// se ocupa de * si /
int fact(); /// se ocupa de () si factori
int add() {
int res = mult();
while (s[pos] == '+' || s[pos] == '-') {
if (s[pos] == '+') {
pos++;
res += mult();
}
else {
pos++;
res -= mult();
}
}
return res;
}
int mult() {
int res = fact();
while (s[pos] == '*' || s[pos] == '/') {
if (s[pos] == '*') {
pos++;
res *= fact();
}
else {
pos++;
res /= fact();
}
}
return res;
}
int fact() {
int res = 0;
if (s[pos] == '(') {
pos++;
res = add();
pos++;
}
else {
while (isdigit(s[pos])) {
res = res * 10 + (s[pos] - '0');
pos++;
}
}
return res;
}
int main() {
f >> s;
g << add();
return 0;
}