Cod sursa(job #1989367)

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