• [题解]P1449 后缀表达式(栈)



    题目链接:P1449 后缀表达式
    题目描述:
    所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
    如:3(5–2)+7对应的后缀表达式为:3.5.2.-7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
    输入格式:输入:后缀表达式
    输出格式:输出:表达式的值
    输入输出样例:
    输入 #1

    3.5.2.-*7.+@
    

    输出 #1

    16
    

    分析:
    的一大用处是表达式的计算。本题要求根据后缀表达式求值,我们可以使用栈在(O(N))的复杂度内求出后缀表达式的值。
    下面给出后缀表达式求值的具体步骤:
    图像 1.png
    以下为P1449后缀表达式的题解:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll Stack[1200],x,top;char ch; 
    int main()
    {
    	ios::sync_with_stdio(false);
    	while(cin>>ch&&ch!='@'){
    		if(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48);
    		else if(ch=='.'){Stack[++top]=x;x=0;}
    		else if(ch=='+'){
    			Stack[top-1]+=Stack[top];
    			Stack[top]=0;top--;
    		}
    		else if(ch=='-'){
    			Stack[top-1]-=Stack[top];
    			Stack[top]=0;top--; 
    		}
    		else if(ch=='*'){
    			Stack[top-1]*=Stack[top];
    			Stack[top]=0;top--; 
    		}
    		else if(ch=='/'){
    			Stack[top-1]/=Stack[top];
    			Stack[top]=0;top--; 
    		}
    	}
    	printf("%d
    ",Stack[1]);
    	return 0;
    }
    

    pic.png

  • 相关阅读:
    Python进程、线程
    Maven项目的坐标GroupId和ArtifactId
    java中的变量
    java中new一个对象的执行过程及类的加载顺序
    java中string和int互相转化
    什么是设计模式?
    Mybatis解决了JDBC编程哪些问题
    SQL注入、占位符拼接符
    JDBC、事务和连接池
    关于Spring配置文件xml文档的schema约束
  • 原文地址:https://www.cnblogs.com/cyanigence-oi/p/11723213.html
Copyright © 2020-2023  润新知