Huawei社の機械質問:LISPの模造

パッケージcom.nowcoder.huawei。

輸入 java.utilの。* ; 

パブリック クラスLISP {
     // 只通过80%
     // (+(* 2 3)(^ 4))
     // (+(* 2 3)(^ 4))(2 3)
     // ((+ 2 3)
     // ((+ 2 3))
     // (^(+(* 2 3)(^((^ 4)))))
    パブリック 静的 ボイドメイン(文字列[]引数){ 
        スキャナスキャナ = 新しいスキャナ(システム。 )で、
        文字列エクスプレス = scanner.nextLine(); 

        スタック <文字>スタック= 新しいスタック<> ();
        以下のためにint型 i = 0; i)は(express.lengthを<; iは++ ){
             チャー C = express.charAt(I)。
            もし(C == '')){ 
                StringBuilderのビルダー = 新規のStringBuilder();
                char型のトップ。
                一方!(stack.empty()&&(トップ= stack.pop())= '(' ){ 
                    builder.append(上面); 
                } 

                currExpストリング = 。builder.reverse()のtoString();
 //                 システム。 out.printlnを(currExp); 

                文字列[] OPS= currExp.split(」 " )。
                もし(ops.length == 2 ){
                     int型値= Integer.valueOf(OPS [1 ])。 ++ ; 
                    列カウント = String.valueOf(値)。
                    INT J = 0; J <count.length(); J ++ ){ 
                        stack.push(count.charAt(J))。
                    } 
                } そう であれば(ops.length == 3 ){
                     int型 A = Integer.valueOf(OPS [1 ])。
                    int型B = Integer.valueOf(OPS [2 ])。
                    int型の値= 0 ;
                    スイッチ(OPS [0 ]){
                         場合 "+"  = A + B。
                            破ります;
                        ケース "*"  = *のB;
                            破ります; 
                    } 
                    文字列のカウント = String.valueOf(値)。
                    以下のためのint型J = 0; J <count.length(); J ++ ){ 
                        stack.push(count.charAt(J))。
                    } 
                } そう であれば(ops.length == 1 ){
                     ためのint型 J = 0; J <OPS [0] .LENGTH(); J ++ ){ 
                        stack.push(OPS [ 0 ] .charAt(J))。
                    } 
                } 

            } { 
                stack.push(C); 
            } 
        } 

        のStringBuilderビルダー = 新規のStringBuilder();
        同時に(!stack.empty())
            builder.append(stack.pop()); 

        試す{ 
            のSystem.out.println(Integer.valueOf(builder.reverse()のtoString())); 
        } キャッチ(例外e){ 
            System.out.printlnは( -1 )。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/bigdata-stone/p/11297179.html