Otrzymujesz ciąg złożony ze znaków 0123456789+*()
. Możesz założyć, że ciąg jest zawsze prawidłowym wyrażeniem matematycznym.
Twoim zadaniem jest usunięcie niepotrzebnych nawiasów, zakładając, że mnożenie ma wyższy priorytet niż dodawanie.
Nawiasy należy usuwać tylko wtedy, gdy nie są potrzebne strukturalnie :
- z powodu zwielokrotnienia wyższy priorytet:
3+(4*5)
=>3+4*5
- z powodu asocjacji mnożenia lub dodawania:
3*(4*5)
=>3*4*5
- gdy są zbędne wokół wyrażenia:
3*((4+5))
=>3*(4+5)
Nawiasy należy przechowywać, gdy można je uprościć ze względu na określone wartości liczbowe:
1*(2+3)
nie należy tego upraszczać1*2+3
0*(1+0)
nie należy tego upraszczać0*1+0
Przykłady:
(4*12)+11 ==> 4*12+11
(1+2)*3 ==> (1+2)*3
3*(4*5) ==> 3*4*5
((((523)))) ==> 523
(1+1) ==> 1+1
1*(2*(3+4)*5)*6 ==> 1*2*(3+4)*5*6
1*(2+3) ==> 1*(2+3)
0*(1+0) ==> 0*(1+0)
(((2+92+82)*46*70*(24*62)+(94+25))+6) ==> (2+92+82)*46*70*24*62+94+25+6
1*(2*(3+4)*5)*6
powinien być ciekawym testem (dla którego moje rozwiązanie obecnie zawodzi).
(2+2)*1