説明:
//入力1 + 2)* 3-4)* 5-6))) //出力((1 + 2)*((3-4)*(5-6)))
コード:
輸入 java.utilの。* ; パブリック クラスG { 公共 静的 ボイドメイン(文字列[]引数){ スキャナSC = 新しいスキャナ(System.in)。 文字列str = sc.nextLine()(トリム)。 文字列結果 = getfullstr(STR)。 System.out.println(結果)。 } パブリック 静的文字列getfullstr(文字列str){ スタックの<string>レフト= 新しいスタック<> (); スタック <文字列>権利= 新しいスタック<> (); CHAR []文字の= str.toCharArray()。 以下のために(int型 i = 0; iはchars.length <; iは++ ){ チャーのC =の文字[I]。 もし(C == '+' || C == ' - ' || C == '+' || C == '*' || C == '/' ){ rights.add(C + "" ); } そう なら(C == '')){ 文字列lstr1 = lefts.pop()。 ストリングlstr2 = lefts.pop()。 ストリングrstr1 = rights.pop()。 lefts.add("(" + lstr2 + rstr1 + lstr1 + ")" )。 } そう であれば(Character.isDigit(文字[I])){ 文字列NUM = C + "" 。 一方、((I + 1)<chars.length && Character.isDigit(文字[I + 1 ])){ NUM + = C。 I ++ ; } lefts.add(NUM)。 } } 一方(rights.size()> 0 ){ 文字列lstr1 = lefts.pop()。 ストリングlstr2 = lefts.pop()。 ストリングrstr1 = rights.pop()。 lefts.add( "(" + lstr2 + rstr1 + lstr1 + ")" )。 } 文字列結果 = "" ; 一方、(lefts.size()> 0 ){ 結果 = lefts.pop()+ 結果。 } 戻り値の結果; } }