Pagini recente » Cod sursa (job #421331) | Cod sursa (job #2315426) | Cod sursa (job #452938) | Cod sursa (job #2238289) | Cod sursa (job #155406)
Cod sursa(job #155406)
#include <stdio.h>
#include <string.h>
#define FIN "evaluare.in"
#define FOUT "evaluare.out"
#define MAXN 100001
char A[MAXN];
static const char *oper[] = { "+-", "*/", "" };
class expresie {
private:
char A[MAXN];
int pos;
int result(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
}
int item() {
int a = 0;
if (A[pos] == '(') {
++pos, a=expr(0), ++pos;
} else {
while ( (unsigned) (A[pos] - '0') < 10 )
a = 10*a + A[pos++] - '0';
}
return a;
}
int expr(int nv) {
if (nv >= 2)
return item();
int a = expr(nv+1);
while ( strchr(oper[nv], A[pos]) )
a = result(a, expr(nv+1), A[pos++]);
return a;
}
public:
expresie(char str[]) {
strcpy(A, str);
}
int solve() {
pos = 0;
return expr(0);
}
};
int main()
{
fgets(A, MAXN, fopen(FIN, "r"));
expresie E(A);
fprintf(fopen(FOUT, "w"), "%d\n", E.solve());
}