1666_栈的应用:逆波兰表达式的计算

2022-5-16 18:17| 发布者: Hocassian| 查看: 41| 评论: 0|原作者: 肇庆学院ACM合集

摘要:
C:\Users\Administrator\Downloads\2019-10-12-10-14-2-8950493555799-Problem List-采集的数据-后羿采集器.html

Pro.ID

1666

Title

栈的应用:逆波兰表达式的计算

Title链接

http://10.20.2.8/oj/exercise/problem?problem_id=1666

AC

58

Submit

227

Ratio

25.55%

时间&空间限制

  • Time Limit: 20000/10000 MS (Java/Others)     Memory Limit: 262144/262144 K (Java/Others)
  • 描述

    给出一个逆波兰表达式,请计算并输出该表达式的运算结果。

    #define MAX_SIZE 1000

    定义栈的数据结构如下:

    typedef struct my_stack {
        int stack[ MAX_SIZE + 1 ];  /// 栈。
        int top;  /// 栈顶
    }Stack;

    需要用到的函数原型有:

    void init ( Stack &st )  /// 初始化栈st

    bool full ( Stack &st )  /// 判断是否栈满

    bool empty ( Stack &st )  /// 判断是否栈空

    int push ( Stack &st , int &e )   /// e进栈

    int top ( Stack &st , int &e )  /// 求栈顶元素,由参数e带回

    int pop ( Stack &st , int &e )  /// 出栈,由参数e带回

    /// void calculate ( Stack &st, int n, int r )  /// n转换为r进制数,结果存在栈st中

    /// void output ( Stack &st )  /// 输出栈内容,即r进制整数

    int calculate ( Stack &st, char rpn[ ] ) /// 利用栈 st 计算逆波兰式 rpn

    当然,需要手工实现栈,否则判cheat并封号。

    输入

    多测试用例,每个测试用例占一行,是一个字符串 str,|str| ≤ 10000 ,表示一条逆波兰表达式,最后一个字符是 '=' 。

    逆波兰式仅包含 + ,-,*,/,% 五种运算。

    每个操作数以及每个运算符后面,均有一个空格,作为分隔。

    str中包含的计算数均为整数,计算数个数不超过1000 。除法是整数除法。

    建议:读入一行字符用 getline 函数,用法:

    getline ( str, 10000 );

    输出

    Description

    给出一个逆波兰表达式,请计算并输出该表达式的运算结果。

    #define MAX_SIZE 1000

    定义栈的数据结构如下:

    typedef struct my_stack {
        int stack[ MAX_SIZE + 1 ];  /// 栈。
        int top;  /// 栈顶
    }Stack;

    需要用到的函数原型有:

    void init ( Stack &st )  /// 初始化栈st

    bool full ( Stack &st )  /// 判断是否栈满

    bool empty ( Stack &st )  /// 判断是否栈空

    int push ( Stack &st , int &e )   /// e进栈

    int top ( Stack &st , int &e )  /// 求栈顶元素,由参数e带回

    int pop ( Stack &st , int &e )  /// 出栈,由参数e带回

    /// void calculate ( Stack &st, int n, int r )  /// n转换为r进制数,结果存在栈st中

    /// void output ( Stack &st )  /// 输出栈内容,即r进制整数

    int calculate ( Stack &st, char rpn[ ] ) /// 利用栈 st 计算逆波兰式 rpn

    当然,需要手工实现栈,否则判cheat并封号。

    Input

    多测试用例,每个测试用例占一行,是一个字符串 str,|str| ≤ 10000 ,表示一条逆波兰表达式,最后一个字符是 '=' 。

    逆波兰式仅包含 + ,-,*,/,% 五种运算。

    每个操作数以及每个运算符后面,均有一个空格,作为分隔。

    str中包含的计算数均为整数,计算数个数不超过1000 。除法是整数除法。

    建议:读入一行字符用 getline 函数,用法:

    getline ( str, 10000 );

    Output

    每个测试用例输出一行结果,逆波兰式计算的结果。

    Sample Input

    229 239 / 260 * 278 / 200 263 % + 98 40 / + 111 - 323 + 338 154 / + =
    447 57 * =

    Sample Output

    416
    25479

    Source
    Author

    样例输入

    229 239 / 260 * 278 / 200 263 % + 98 40 / + 111 - 323 + 338 154 / + =
    447 57 * =

    样例输出

    416
    25479

    提示

    作者


    路过

    雷人

    握手

    鲜花

    鸡蛋

    最新评论

    返回顶部