Pagini recente » Cod sursa (job #444964) | Clasament cerculdeinfo-lectia18-grafuri2 | Arhiva de probleme | Monitorul de evaluare | Cod sursa (job #386321)
Cod sursa(job #386321)
#include<cstdio>
#define max 100005
char S[max];
char *p=S;
long int sub();
long int prod();
long int eval(){
long r = prod();
while( *p == '+' || *p == '-'){
switch( *p){
case '+':
{
++p;
r += prod();
break;
}
case '-':{
++p;
r -= prod();
break;
}
}
}
return r;
}
long int prod(){
long r = sub();
while( *p == '*' || *p == '/'){
switch( *p){
case '*':{
++p;
r *= sub();
break;
}
case '/':{
++p;
r /= sub();
break;
}
}
}
return r;
}
long int sub(){
long r = 0;
if( *p == '(') {
++p;
eval();
++p;
}
else
while(*p >= '0' && *p <='9') {r = r*10 + *p - '0';++p;}
return r;
}
int main(){
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
fgets( S, max, f);
fprintf(g,"%ld\n", eval() );
return 0;
}