Pagini recente » Cod sursa (job #1321722) | Cod sursa (job #1193475) | Cod sursa (job #796997) | Cod sursa (job #3202611) | Cod sursa (job #1232200)
#include <cstdio>
using namespace std;
long expresie(char *&);
long termen(char *&);
long factor(char *&);
long expresie(char *&p) {
long sum = termen(p);
while(*p == '+' || *p == '-') {
if(*p == '+') {
p++;
sum += termen(p);
} else {
p++;
sum -= termen(p);
}
}
return sum;
}
long termen(char *&p) {
long sum = factor(p);
while(*p == '*' || *p == '/') {
if(*p == '*') {
p++;
sum *= factor(p);
} else {
p++;
sum /= factor(p);
}
}
return sum;
}
long factor(char *&p) {
long semn = 1, val = 0;
while(*p == '-') {
p++;
semn *= -1;
}
if(*p == '(') {
p++;
val = expresie(p);
p++;
return semn * val;
}
while(*p >= '0' && *p <= '9') {
val *= 10;
val += *p - '0';
p++;
}
return semn * val;
}
char exp[100005];
char *p;
int main() {
long i, j;
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
gets(exp);
p = exp;
printf("%ld\n", expresie(p));
return 0;
}