一日一プロ
逆ポーランド記法
スタック練習
using System; using System.Collections.Generic; namespace stack { class MainClass { public const int ERROR = 0xFFFF; public static List<int> stack = new List<int> (); public static void Main (string[] args) { //入力 string[] str = Console.ReadLine ().Split (' '); for (int i = 0; i < str.Length; i++) { int a, b; switch (str [i]) { case "+": b = pop (); a = pop (); if (a != ERROR && b != ERROR) { push (a + b); } else { Console.WriteLine ("ERROR"); break; } break; case "-": b = pop (); a = pop (); if (a != ERROR && b != ERROR) { push (a - b); } else { Console.WriteLine ("ERROR"); break; } break; case "*": b = pop (); a = pop (); if (a != ERROR && b != ERROR) { push (a * b); } else { Console.WriteLine ("ERROR"); break; } break; case "/": b = pop (); a = pop (); if (a != ERROR && b != ERROR) { push (a / b); } else { Console.WriteLine ("ERROR"); break; } break; default: int s = int.Parse (str [i]); push (s); break; } } int ans = pop (); Console.WriteLine ("{0}", ans); } public static void push(int num) { stack.Add (num); } public static int pop() { int ret; if (stack.Count != 0) { ret = stack [stack.Count - 1]; stack.RemoveAt (stack.Count - 1); } else { ret = ERROR; } return ret; } } }