zoukankan      html  css  js  c++  java
  • 算法题:前缀表达式的运算

    输入描写叙述:

    输入包括多组数据,每组数据包括两行。

    第一行为正整数n(3≤n≤50)。紧接着第二行包括n个由数值和运算符组成的列表。

    “+-*/”分别为加减乘除四则运算。当中除法为整除。即“5/3=1”。

    输出描写叙述:

    相应每一组数据,输出它们的运算结果。

    输入样例:

    3
    + 2 3
    5
    * + 2 2 3
    5
    * 2 + 2 3

    输出样例:

    5
    12
    10

    #include <iostream>
    #include <string.h>
    #include <stack>
    using namespace std;
    
    
    bool Is_Op(char ch)
    {
        return (ch == '+' || ch == '-' || ch == '*' || ch == '/');
    }
    int Deal(int a, char op, int b)
    {
        switch (op)
        {
        case '+':
            return a + b;
            break;
        case '-':
            return a - b;
            break;
        case '*':
            return a*b;
            break;
        case '/':
            if (b!=0)
            return a / b;
            break;
        default:
            break;
        }
    }
    int main()
    
    {
        int n;
        stack<string> NUM;
        while (cin >> n)
        {
            char *inputStr = new char[n];
            cin.get();
            cin.get(inputStr,n*2);
            string inputSTR(inputStr);
            string SStr(inputSTR.rbegin(),inputSTR.rend());
            strcpy(inputStr,SStr.c_str());
            char *p = inputStr;
            while (*p != '' || NUM.size()!=1)
            {
                string s;
                if (*p == ' ')
                {
                    p++;
                    continue;
                }
                if (Is_Op(*p))
                {
                    string num1 = NUM.top();
                    NUM.pop();
                    string NUM1(num1.rbegin(), num1.rend());
                    string num2 = NUM.top();
                    string NUM2(num2.rbegin(), num2.rend());
                    NUM.pop();
                    int result = Deal(atoi(NUM1.c_str()),*p,atoi(NUM2.c_str()));
                    char *buff = new char[50];
                    sprintf(buff,"%d",result);
                    NUM.push(buff);
                    p++;
                }
                else
                {
                    while (*p != ' ' && *p != '')
                    {
                        s += *p;
                        p++;
                    }
                    NUM.push(s);        
                }
            }
            cout<<NUM.top().c_str() << endl;
            NUM.pop();
        }
        return 0;
    }
  • 相关阅读:
    day17_sql优化——AWR
    [笔记]《HTTP权威指南》- 媒体类型和字符集
    分析 webpack 打包后的代码
    跨站点请求伪造(CSRF)
    如何定制 fis3-jello
    [翻译]简单的实现一个Promise
    浏览器的 bfcache 特性
    Linux 下搭建 FTP 服务器
    better-scroll 源码分析
    [笔记]移动端的 viewport 和各种像素区分
  • 原文地址:https://www.cnblogs.com/llguanli/p/8391960.html
Copyright © 2011-2022 走看看