算術式の値が評価 逆ポーランド記法を。
有効な演算子は +
、 -
、 *
、 /
。各オペランドは整数または別の表現であってもよいです。
注意:
- 二つの整数間の部門はゼロに向かって切り捨てる必要があります。
- 与えられたRPN式は常に有効です。これは、式は常に結果を評価するだろうし、ゼロ操作によって任意の格差がないことを意味します。
例1:
入力:[ "2"、 "1"、 "+"、 "3"、 "*"] 出力:9 説明:((2 + 1)* 3)= 9
例2:
入力:[ "4"、 "13"、 "5"、 "/"、 "+"] 出力:6 説明:(4 +(13/5))= 6
例3:
入力:[ "10"、 "6"、 "9"、 "3"、 "+"、 "-11"、 "*"、 "/"、 "*"、 "17"、 "+"、「5 」、 "+"] 出力:22 説明: ((10 *(6 + 3 /((9)* -11)))+ 17)+ 5 =((10 *(6 /(12 * -11)) )+ 17)+ 5 =((10 *(6 / -132))+ 17)+ 5 =((10×0)+ 17)+ 5 =(0 + 17)+ 5 = 17 + 5 = 22
ソリューション:
使用栈即可
1 クラスソリューション{ 2 公共: 3 INT evalRPN(ベクトル< ストリング >・トークン){ 4 もし(tokens.size()== 0)戻り 0 ; 5 スタック< int型 > S; 6 のための:(トークン自動A) 7 { 8 であれば(== " + " || A == " - " || A == " * " || A == " / " ) 9 { 10 INT NUM2 = s.top()。 11 s.pop(); 12 INT NUM1 = s.top()。 13 s.pop()。 14の INTは RES = 0 。 15 であれば(== " + " ) 16の RES = NUM1 + NUM2。 17 他の 場合(A == " - " ) 18の RES = NUM1 - NUM2。 19 他の 場合(A == "* 」) 20の RES = NUM1の*のNUM2; 21の 他 22 RES = NUM1 / NUM2; 23 s.push(RES); 24 } 25 他 26 s.push(ATOI(a.c_str())); 27 } 28 リターンs.top(); 29 } 30 }。