Pagini recente » Cod sursa (job #665212) | Cod sursa (job #166716) | Cod sursa (job #517908) | Cod sursa (job #1601557) | Cod sursa (job #1989366)
#include<fstream>
using namespace std;
//const long MAX=100001;
long multiplicationDivision(int &w, string expr);
long term(int &w, string expr);
long ev(int &w,string 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, string 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,string 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(){
ifstream in; ofstream out;
in.open("evaluare.in");
string expr;
in>>expr;
int w=0;
fprintf(fopen("evaluare.out", "w"), "%ld\n", ev(w,expr));
in.close();
return 0;
}