Pagini recente » Cod sursa (job #158852) | Cod sursa (job #2354573) | Cod sursa (job #2758346) | Cod sursa (job #1193649) | Cod sursa (job #694717)
Cod sursa(job #694717)
#include <cstring>
#include <cstdio>
#include <cmath>
char data[100128];
int solve(int l, int r) {
int i = l;
int op1 = -1;
int op2 = -1;
int par = 0;
int value = 0;
for (int i = l; i < r; ++i) {
if (data[i] == '(') {
++par;
} else if (data[i] == ')') {
--par;
} else {
if (!par) {
if (data[i] == '+' || data[i] == '-') {
op1 = i;
} else if (data[i] == '*' || data[i] == '/') {
op2 = i;
} else {
value = value * 10 + data[i] - '0';
}
}
}
}
if (op1 != -1) {
if (data[op1] == '+') {
return(solve(l, op1) + solve(op1 + 1, r));
} else {
return(solve(l, op1) - solve(op1 + 1, r));
}
} else if (op2 != -1) {
if (data[op2] == '*') {
return(solve(l, op2) * solve(op2 + 1, r));
} else {
return(solve(l, op2) / solve(op2 + 1, r));
}
} else {
if (data[l] == '(' && data[r - 1] == ')') {
return(solve(l + 1, r - 1));
} else {
return(value);
}
}
}
int main() {
FILE * in = fopen("evaluare.in", "rt");
FILE * out = fopen("evaluare.out", "wt");
fscanf(in, "%s", data);
fprintf(out, "%d\n", solve(0, strlen(data)));
fclose(in);
fclose(out);
}