Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2008-02-28 08:50:40.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:evaluare.in, evaluare.outSursăad-hoc
AutorArhiva EducationalaAdăugată desima_cotizoSima Cotizo sima_cotizo
Timp execuţie pe test0.025 secLimită de memorie20480 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Evaluarea unei expresii

Se da un sir de caractere ce reprezinta o expresie aritmetica.

Cerinta

Afisati rezultatul obtinut prin evaluarea expresiei.

Date de intrare

Fisierul de intrare evaluare.in va contine pe prima linie un sir de caractere compus din cifre ( '0' - '9' ), operatorii '+', '-', '*', '/' si paranteze( '(', ')' ).

Date de iesire

In fisierul de iesire evaluare.out se va scrie un singur numar intreg care reprezinta valoarea obtinuta in urma evaluarii expresiei.

Restrictii si precizari

  • 1 ≤ lungimea sirului ≤ 100 000
  • Operatorii '+','-','*' au semnificatia cunoscuta de la matematca, iar operatorul '/' reprezinta catul impartirii intregi a doua numere
  • Ordinea efectuarii operatiilor este cea normala
  • Se garanteaza ca atat rezultatul final, cat si orice rezultat intermediar nu va depasi in modul 1 000 000 000

Exemplu

evaluare.inevaluare.out
(1+1)*3+10/2
11
Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?

Indicatii de rezolvare

Probabil cea mai cunoscuta metoda de a evalua o expresie algebrica este scrierea ei in forma poloneza, urmata de evaluarea propriu-zisa, despre care puteti gasi mai multe aici .
Problema se poate rezolva si folosind arbori, metoda explicata pe larg aici .
De asemenea, o a treia metoda este explicata pe larg in aceasta sursa de 100 puncte.

Probleme asemanatoare:

Cosmin: Fa te rog si niste teste mai mici (lungimea expresiei 500 de caractere), ca e o solutie simpla recursiva ce vreau sa o scriu.
Cotizo: Ok. Pot sa micsorez limita daca e nevoie. Oricum si eu am o solutie cu recursivitate indirecta pe care o mentionam la acea "a treia metoda" si nu stiu daca intra in timp inca, dar mie imi place pt ca e usor de inteles :)
Cosmin: nu trebuie sa micsorezi limita, doar sa dai teste gradate. Cu o solutie sa se ia 50 si cu alta 100.