首页 > 其他分享 >P1449 后缀表达式-模拟栈

P1449 后缀表达式-模拟栈

时间:2023-04-17 12:33:33浏览次数:39  
标签:ch 符号 后缀 P1449 int 模拟 表达式

题目描述

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@。在该式中,@ 为表达式的结束符号。. 为操作数的结束符号。

输入格式

输入一行一个字符串 s,表示后缀表达式。

输出格式

输出一个整数,表示表达式的值。

输入输出样例

输入 #1
3.5.2.-*7.+@
输出 #1
16

说明/提示

数据保证,1≤∣s∣≤50,答案和计算过程中的每一个值的绝对值不超过 109。

 

分析:

  用数组模拟栈,读入数字,遇到操作符号就取出栈顶两个元素进行操作,开始对于我的难点是数字储存,因为可能不是一位数字,但也可以通过模拟解决。

代码:

#include <iostream>
#include <cstdio>

using namespace std;

const int N=60;

int stk[N];
int tt;

int main()
{
    int now=0;
    
    while(1)
    {
        char ch;
        scanf("%c",&ch);
        if(ch=='@') break;
        if(ch>='0'&&ch<='9')
        {
            now*=10;
            now+=(ch-'0');
        }
        else if(ch=='.')
        {
            stk[++tt]=now;
            now=0;
        }
        else
        {
            int t=stk[tt--];
            if(ch=='+') stk[tt]+=t;
            else if(ch=='-') stk[tt]-=t;
            else if(ch=='*') stk[tt]*=t;
            else stk[tt]/=t;
        }
    }
    
    printf("%d",stk[tt]);
    
    return 0;
}

 

标签:ch,符号,后缀,P1449,int,模拟,表达式
From: https://www.cnblogs.com/yaowww/p/17325477.html

相关文章

  • 运算符、表达式和语句
    运算符、表达式和语句关键字--->while、typedef运算符--->=、-、*、/、%、++、--复合语句、自动类型转换、强制类型转换编写带有参数的函数while循环示例代码:#include<stdio.h>#defineADJUST7.31intmain(void){constdoubleSCALE=0.333;dou......
  • 【c#表达式树】最完善的表达式树Expression.Dynamic的玩法
    【c#表达式树】最完善的表达式树Expression.Dynamic的玩法 引言在我第一次写博客的时候,写的第一篇文章,就是关于表达式树的,链接:https://www.cnblogs.com/1996-Chinese-Chen/p/14987967.html,其中,当时一直没有研究Expression.Dynamic的使用方法(因为网上找不到资料),就......
  • JavaScript运算符与表达式
    目录一、===二、||三、??与?.???.四、...五、[]{}[]{}一、===严格相等运算符,用作逻辑判断1==1 //返回true1=='1' //返回true,会先将右侧的字符串转为数字,再做比较1==='1' //返回false,类型不等,直接返回falsetypeof查看某个值的类型typeof1 //返回'number'ty......
  • JavaScript 邮箱 验证正则表达式 ,包看懂
    \w就是[0-9a-zA-Z_]\s是[\t\v\n\r\f]\S是[^\t\v\n\r\f]\W是[^0-9a-zA-Z_]\D就是[^0-9]\d就是[0-9].就是[^\n\r\u2028\u2029]。表示几乎任意字符。varreg=/\w{1,30}(\.\w{1,10}){0,2}@\w{1,10}\.\w{1,10}/g\w{1,30}理解为至少有一个字符,最多30个.\w{1,30}理......
  • 第三周——后缀表达式
    题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。如:3*(5-2)+73*(5-2)+7 对应的后缀表达式为:3.5.2.-*[email protected]*7.+@。在该式中,@ 为表达式的结束符号。.......
  • python3正则-表达式
    1、介绍这里整理了表达式,即pattern参数的语法。其本质是一个str类型。2、开始和结尾(1)^^匹配字符串的开头(2)$$匹配字符串的末尾(3)整体匹配同时使用^和$3、匹配次数(1)贪婪匹配和非贪婪匹配模式贪婪匹配,在允许的范围内尽可能多的匹配表达式次数。比如*、+、{n,m}等......
  • Python 利用正则表达式和filter函数 筛选序列(列表等)
    在 Python 中,序列类型包括字符串、列表、元组、集合和字典http://c.biancheng.net/view/4312.htmlPython内建的filter()函数用于过滤序列https://www.liaoxuefeng.com/wiki/1016959663602400/1017404530360000序列内逐个元素筛选filter并用list保存结果筛选的判断条件是re.match......
  • 【学习笔记】后缀自动机 SAM
    由于本人时间原因,此处只为一个SAM的总结,讨论SAM的基本操作以及性质,详细证明如要详细学习请查询luogu题解。算法原理SAM中每一个节点代表所有结束位置(endpos)相同的串的集合。每个节点有:1.后缀链接link(到endpos包含它且maxlen最长的那个点,且是为当前点的后缀的点)2.此点所代表的......
  • 2023-4-14自增前后缀区别
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ inta=39; intb=39; cout<<a<<endl<<b<<endl; a++; ++b; cout<<"oneyearlater...."<<endl; cout<<"a="<<a<<endl<<"......
  • MySQL正则表达式:REGEXP 和 LIKE
    正则表达式作用:根据指定的匹配模式匹配文中符合要求的特殊字符。REGEXP:①操作符中常用的匹配列表:②匹配特殊字符使用\\进行转义\\.  能够匹配.\\f  换页\\n换行\\r回车\\t制表\\ 纵向制表 ③进行or匹配:搜索两个串之一(或者为这个串,或者为另一个串),使用......