Cod sursa(job #2792109)

Utilizator andreic06Andrei Calota andreic06 Data 31 octombrie 2021 22:33:00
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <string>
#include <fstream>
#include <ctype.h>

using namespace std;
const int LEN_MAX = 1e5;
char input_exp[1 + LEN_MAX];

int solve_nr ( char* &str ) {
   int result = 0;
   while ( isdigit ( *str ) ) {
      result = result * 10 + ( *str - '0' );
      str ++;
   }
   ///printf ( "NUMBER = %d ", result );
   return result;
}

int solve_exp ( char* &str );

int solve_factor ( char* &str  ) {

   int result;
   if ( *str == '(' ) {
     str ++;
     result = solve_exp ( str );
     str ++;
   }
   else
     result = solve_nr ( str );
   ///printf ( "FACTOR = %d ", result );
   return result;
}

int solve_term ( char* &str ) {
   int result = solve_factor ( str );
   while ( *str == '*' || *str == '/' ) {

      if ( *str == '*' ) {
        str ++;
        result *= solve_factor ( str );
      }
      else {
        str ++;
        result /= solve_factor ( str );
      }
   }
   ///printf ( "TERM = %d ", result );
   return result;
}

int solve_exp ( char* &str ) {
   int result = solve_term ( str );
   while ( *str == '+' || *str == '-' ){

      if ( *str == '+' ) {
        str ++;
        result += solve_term ( str );
      }
      else {
        str ++;
        result -= solve_term ( str );
      }
   }
   ///printf ( "EXP = %d ", result );
   return result;
}

ifstream fin ( "evaluare.in" );
ofstream fout ( "evaluare.out" );
int main()
{
   fin >> input_exp;
   char *p = input_exp;
   fout << solve_exp ( p );
    return 0;
}