Pagini recente » Cod sursa (job #336462) | Cod sursa (job #1592119) | Cod sursa (job #2758953) | Cod sursa (job #474819) | Cod sursa (job #1989368)
#include<fstream>
#include<iostream>
using namespace std;
const long MAX=100001;
long multiplicationDivision(int &w,char expr[]);
long term(int &w, char expr[]);
long ev(int &w, char expr[]){ //addition & subtraction
long r=multiplicationDivision(w,expr);
while(expr[w]=='+' || expr[w]=='-'){
switch(expr[w]){
case'+': {++w; r+=multiplicationDivision(w,expr); break;}
case'-': {++w; r-=multiplicationDivision(w,expr); break;}
}
}
return r;
}
long multiplicationDivision(int &w, char expr[]){
long r=term(w,expr);
while(expr[w]=='*' || expr[w]=='/'){
switch(expr[w]){
case '*': { ++w; r*=term(w,expr); break;}
case '/': { ++w; r/=term(w,expr); break;}
}
}
return r;
}
long term(int &w, char expr[]){
long r=0;
if(expr[w]=='('){
++w;
r=ev(w,expr);
++w;
}
else
while(expr[w]<='9' && expr[w]>='0'){
r=r*10+ expr[w]-'0';
w++;
}
return r;
}
int main(){
char expr[MAX];
int w=0;
if(fgets(expr,MAX,fopen("evaluare.in","r"))!=NULL)
fprintf(fopen("evaluare.out", "w"), "%ld\n", ev(w,expr));
return 0;
}