逆ポーランド記法について
数式やプログラムを記述する方法(記法)の一種。演算子(オペレータ)を被演算子(オペランド)の後(右)に記述することから、後置記法 (Postfix Notation) とも言う。
javaのStackクラスを使う
縦長のビーカーがあるのをイメージし、数字を順番に入れていく。
演算子がある場合、スタックから数字2つを取り出し計算結果を上に積み上げる。
一番上にある数字が答えとなる。
「1 2 +」は「3」、「15 10 -」は「5」、「15 10 - 3 *」は「15」
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class ReversePolishNotationOld { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] stringArray = br.readLine().split("\\s"); // 後に入れたものを先に抜き出す(いわゆるLIFO) Stack<Integer> que = new Stack<Integer>(); int a = 0; int b = 0; for (int i = 0; i < stringArray.length; i++) { if (stringArray[i].equals("+")) { a = que.pop(); b = que.pop(); que.add(b + a); continue; } if (stringArray[i].equals("-")) { a = que.pop(); b = que.pop(); que.add(b - a); continue; } if (stringArray[i].equals("*")) { a = que.pop(); b = que.pop(); que.add(b * a); continue; } if (stringArray[i].equals("/")) { a = que.pop(); b = que.pop(); que.add(b / a); continue; } // 演算子以外はstackに登録する que.push(Integer.parseInt(stringArray[i])); } System.out.println(que.pop()); } }