Pagini recente » Cod sursa (job #1174103) | Cod sursa (job #2466270) | Cod sursa (job #2843753) | Cod sursa (job #1820826) | Cod sursa (job #1989367)
#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], *p=expr;
int w=0;
fgets(expr,MAX,fopen("evaluare.in","r"));
fprintf(fopen("evaluare.out", "w"), "%ld\n", ev(w,expr));
return 0;
}