覚書

だいたいC#で何か書いてます。だいたい競プロ。

ALDS1_3_A Elementary data structures - Stack

スタック | アルゴリズムとデータ構造 | Aizu Online Judge

逆ポーランド記法は、演算子オペランドの後に記述する数式やプログラムを記述する記法です。例えば、一般的な中間記法で記述された数式 (1+2)*(5+4) は、逆ポーランド記法では 1 2 + 5 4 + * と記述されます。逆ポーランド記法では、中間記法で必要とした括弧が不要である、というメリットがあります。

逆ポーランド記法で与えられた数式の計算結果を出力してください。

System.Collectionsを使えば楽に解ける

using System;
using System.Collections.Generic;
namespace ALDS1_3_A
{
    class Program
    {
        static void Main(string[] args)
        {
            var poland = new Stack<int>();
            string[] str = Console.ReadLine().Split();
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == "+")
                {
                    poland.Push(poland.Pop() + poland.Pop());
                }
                else if (str[i] == "-")
                {
                    poland.Push(-1 * (poland.Pop() - poland.Pop()));
                }
                else if (str[i] == "*")
                {
                    poland.Push(poland.Pop() * poland.Pop());
                }
                else
                {
                    poland.Push(int.Parse(str[i]));
                }
            }
            Console.WriteLine(poland.Pop());
        }
    }
}

演算時が-の処理-1の乗算以外にかっこいい方法あったら誰か教えてください


Stackのリファレンス(MSDN)
Stack クラス (System.Collections)