フォースアルゴリズムバックルタイトル-150。逆ポーランド記法を評価

 

算術式の値が評価  逆ポーランド記法を

有効な演算子は  +、  -、  *、  /各オペランドは整数または別の表現であってもよいです。

注意:

  • 二つの整数間の部門はゼロに向かって切り捨てる必要があります。
  • 与えられた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 }。

 

おすすめ

転載: www.cnblogs.com/zzw1024/p/11756316.html