パッケージ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 )。 } } }