1.3.11

上次更新:2019-04-17
发现了题解错误/代码缺陷/排版问题?请点这里:如何:提交反馈

解答

官方 JAVA 代码:EvaluatePostfix.java

遇到数字就入栈,遇到运算符就弹出两个数字运算,再把结果入栈。

如果倒着读取的话也可以用递归做,当作前序表达式计算即可。

代码

using System;
using Generics;

namespace _1._3._11
{
    /*
     * 1.3.11
     * 
     * 编写一段程序 EvaluatePostfix,从标准输入中得到一个后序表达式,求值并打印结果
     * (将上一题的程序中得到的输出用管道传递给这一段程序可以得到和 Evaluate 相同的行为)。
     * 
     */
    class EvaluatePostfix
    {
        static void Main(string[] args)
        {
            Stack<int> stack = new Stack<int>();

            string[] input = "7 16 * 5 + 16 * 3 + 16 * 1 +".Split(' ');

            foreach (string n in input)
            {
                if (n == " ")
                {
                    continue;
                }
                else if (n == "+")
                {
                    stack.Push(stack.Pop() + stack.Pop());
                }
                else if (n == "-")
                {
                    int temp = stack.Pop();
                    stack.Push(stack.Pop() - temp);
                }
                else if (n == "*")
                {
                    stack.Push(stack.Pop() * stack.Pop());
                }
                else if (n == "/")
                {
                    int temp = stack.Pop();
                    stack.Push(stack.Pop() / temp);
                }
                else
                {
                    stack.Push(int.Parse(n));
                }
            }

            Console.WriteLine(stack.Pop());
        }
    }
}

另请参阅

Generics 库

上一题 下一题