Expresiones algebraicas P28285


Statement
 

pdf   zip

html

Te pedimos que programes una calculadora capaz de evaluar expresiones matemáticas sencillas (suma +, resta -, producto * y división entera /). Para que te resulte más fácil, te pondremos muchos paréntesis. En concreto: siempre que tengamos una operación, como por ejemplo, las sumas “3+4” o “(1*4)+2”, se dará un nivel de paréntesis adicional para agrupar la operación y los operandos: “(3+4)” y “((1*4)+2)”.

Escribe un programa que evalúe este tipo de expresiones extra-parentizadas.

Entrada

La entrada está formada por un número indeterminado, pero no superior a 500, de casos de prueba, cada uno de los cuáles consiste en una línea con una expresión matemática como las descritas. Todos los números que aparecen como operandos están entre el 0 y el 999, ambos inclusive.

Salida

Escribe, para cada caso de pruebas, el resultado de evaluar la expresión matemática. Ten en cuenta que no es posible dividir por 0: si esto ocurriera al evaluar una expresión, escribe “DIV 0” como salida correspondiente.

Se te garantiza que todas las expresiones están correctamente parentizadas, y que durante el curso de su evaluación no encontrarás números cuyo valor absoluto sea mayor que 1015.

Observación

La división entera consiste en dividir dos enteros y quedarse con el cociente, sin decimales, y descartar el resto, como al usar la división entera / en C o C++.

Puntuación

Se te dará 10 puntos por resolver cada una de las 10 entradas. La entrada i-ésima no contendrá expresiones con más de 1,2,3,5,10,20,30,100,300,1000 operaciones. Además, las primeras 3 entradas no contendrán números superiores al 9 (como el Ejemplo 1) y las primeras 5 entradas no contendrán ninguna división (como el Ejemplo 2).

Public test cases
  • Input

    (2+2)
    (1*(4*(2*4)))
    ((1+(2-3))-2)
    

    Output

    4
    32
    -2
    
  • Input

    (123+12)
    ((100-99)*(45-101))
    

    Output

    135
    -56
    
  • Input

    (1/4)
    (3/4)
    (4/4)
    (100/4)
    (((2+2)/(2+2))+1)
    (((2-2)/(2-2))+1)
    (((2-2)/(2+2))+1)
    

    Output

    0
    0
    1
    25
    2
    DIV 0
    1
    
  • Information
    Author
    Omer Giménez
    Language
    Spanish
    Official solutions
    C++
    User solutions
    C++