Report abuse

include <iostream> 
using namespace std; 

//Retourne la valeur de la sous-expression de la chaîne e 
//commençant à la position i. Au retour de la fonction, i 
//est la position du caractère qui suit la sous-expression 
//évaluée. 

int evalAux(char e[], int &i) 
{ 
  //Si le premier caractère est '('. 
  //La sous-expression est donc une somme, 
  //une différence, ... 
  if (e[i] == '(') 
  { 
    i++; //On passe la parenthèse. 
    int valOpGche = evalAux(e, i); //Valeur de l'opérande gauche. 
    char op = e[i]; //Récupération de l'opérateur. 
    i++; //On passe l'opérateur. 
    int valOpDt = evalAux(e, i); //Valeur de l'opérande droit. 
    i++; //On passe la parenthèse fermante. 
    switch (op) 
    { 
      case '+': return valOpGche + valOpDt; 
      case '-': return valOpGche - valOpDt; 
      case '*': return valOpGche * valOpDt; 
      default: return valOpGche / valOpDt; 
    } 
  } 
  else //e[i] != '(', donc la sous-expression est un nombre. 
  { 
    int val = 0; 
    for (; e[i] >= '0' && e[i] <= '9'; i++) 
      val = 10 * val + e[i] - '0'; 
    return val; 
  } 
}

//Evalue l'expression donnée dans la chaîne e. 
int eval(char e[]) 
{ 
  int i = 0; 
  return evalAux(e, i); 
}
 
int main(){ 
  char e[100]; 
  cin >> e; 
  cout << eval(e) << endl; 
  return 0 ; 
}