Pagini recente » Cod sursa (job #2493560) | Cod sursa (job #858870) | Cod sursa (job #178987) | Monitorul de evaluare | Cod sursa (job #1849887)
#include <cstdio>
#define MAX_S 100000
using namespace std;
char L[MAX_S];
int readNumber(char* &p) {
int n = 0;
for (; *p >= '0' && *p <= '9'; ++p)
n = 10 * n + *p - '0';
return n;
}
int term(char*&);
int prod(char*&);
int sum(char* &p) {
int res = prod(p);
while (*p != '\n' && *p != ')')
switch (*p) {
case '+': res += prod(++p); break;
case '-': res -= prod(++p); break;
}
if (*p == ')')
++p;
return res;
}
int prod(char* &p) {
int res = term(p);
while (*p != '\n' && *p != '+' && *p != '-' && *p != ')')
switch (*p) {
case '*': res *= term(++p); break;
case '/': res /= term(++p); break;
}
return res;
}
int term(char* &p) {
int res;
if (*p == '(')
res = sum(++p);
else
res = readNumber(p);
return res;
}
int main() {
FILE *fin = fopen("evaluare.in", "r");
FILE *fout = fopen("evaluare.out", "w");
fgets(L, MAX_S, fin);
char *p = L;
fprintf(fout, "%d", sum(p));
return 0;
}