Pagini recente » Istoria paginii utilizator/xxspeedyxxro | Istoria paginii utilizator/nicolacolopelnic | Cod sursa (job #24350) | Cod sursa (job #406400) | Cod sursa (job #1188443)
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int knmax = 1e5 + 5;
char *p, given_expr[knmax];
int term();
int factor();
int number();
int term(){
int t = factor();
while(*p == '+' || *p == '-'){
if(*p == '-'){
++p;
t -= factor();
}
else{
++p;
t += factor();
}
}
return t;
}
int factor(){
int t = number();
while(*p == '*' || *p == '/'){
if(*p == '*'){
++p;
t *= number();
}
else{
++p;
t /= number();
}
}
return t;
}
int number(){
int t = 0;
while(*p <= '9' && *p >= '0'){
t = t * 10 + *p - '0';
++p;
}
if(*p == '('){
++p;
t = term();
++p;
}
return t;
}
int main(){
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
gets(given_expr);
p = given_expr;
printf("%d\n", term());
return 0;
}