Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | evaluare.in, evaluare.out | Sursă | ad-hoc |
Autor | Arhiva Educationala | Adăugată de | |
Timp execuţie pe test | 0.025 sec | Limită de memorie | 20480 kbytes |
Scorul tău | N/A | Dificultate | N/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 rezultatul final, operanzii si orice rezultat intermediar nu depasesc in modul 1 000 000 000 (un miliard)
Exemplu
evaluare.in | evaluare.out |
---|---|
(1+1)*13+10/2 | 31 |
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 de puncte. O varianta mai compacta este aceasta sursa .
Doua implementari care merita cu prisosinta sa fie luate in seama sunt: 1 si 2 . Prima este utila prin lipsa recursivitatii indirecte, iar a doua construieste arborele expresiei.