Pagini recente » Cod sursa (job #206483) | Cod sursa (job #1208569) | Istoria paginii utilizator/cozmacodrin | Cod sursa (job #630156) | Cod sursa (job #184568)
Cod sursa(job #184568)
#include <iostream>
#define MAX 100010
using namespace std;
char s[MAX],*p=s;
long termen(void);
long factor(void);
long eval(void){
long rez=termen();
while (*p=='+' || *p=='-'){
switch(*p){
case '+':
++p;
rez+=termen();
break;
case '-':
++p;
rez-=termen();
break;
}
}
return rez;
}
long termen(void){
long rez=factor();
while (*p=='*' || *p=='/'){
switch(*p){
case '*':
++p;
rez*=factor();
break;
case '/':
++p;
rez/=factor();
break;
}
}
return rez;
}
long factor(void){
long x=0;
if (*p=='('){
++p;
x=eval();
++p;
} else
while (*p>='0' && *p<='9'){
x*=10;
x+=(*p)-'0';
++p;
}
return x;
}
int main(void){
freopen("evaluare.in","rt",stdin);
freopen("evaluare.out","wt",stdout);
fgets(s,MAX,stdin);
printf("%ld",eval());
fclose(stdin);fclose(stdout);
return 0;
}