Cod sursa(job #1989366)

Utilizator b10nd3Oana Mancu b10nd3 Data 7 iunie 2017 02:41:13
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#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;
}