Pagini recente » Cod sursa (job #1682617) | Cod sursa (job #443340) | Cod sursa (job #245556) | Cod sursa (job #1285953) | Cod sursa (job #156031)
Cod sursa(job #156031)
#include <cstdio>
#include <cctype>
#include <cassert>
const int NMAX = 1 << 17;
char S[NMAX], op[NMAX];
int NP, polo[NMAX], NO;
void eval(char op) {
int v = 0;
switch (op) {
case '+': v = polo[NP-1] + polo[NP]; break;
case '-': v = polo[NP-1] - polo[NP]; break;
case '*': v = polo[NP-1] * polo[NP]; break;
case '/': v = polo[NP-1] / polo[NP]; break;
default: assert(true);
}
polo[--NP] = v;
}
int main(void) {
FILE *fin = fopen("evaluare.in", "rt");
fscanf(fin, " %s", S);
fclose(fin);
int i, u;
NP = -1; NO = -1;
for (i = 0; S[i]; ++i) {
switch (S[i]) {
case '(': op[++NO] = '('; break;
case ')':
while (op[NO] != '(')
eval(op[NO--]);
--NO;
break;
case '+':
case '-':
while (op[NO] == '*' || op[NO] == '/')
eval(op[NO--]);
case '/':
case '*':
op[++NO] = S[i];
break;
default:
for (u = 0; isdigit(S[i]); ++i)
u = u * 10 + (S[i] - '0');
--i;
polo[++NP] = u;
}
}
while (NO >= 0 && op[NO] != '(') eval(op[NO--]);
FILE *fout = fopen("evaluare.out", "wt");
fprintf(fout, "%d\n", polo[0]);
fclose(fout);
return 0;
}