栈运用的模板题,对于符号进行出入栈操作,每次与栈顶的符号进行优先级判断,得出第一行后缀表达式。

在其后的化简计算中,每次用一个特殊符号(代码中使用了'?')代替原来的计算结果引用,并开一个数组表示每次的计算结果,之后搜索到'?'时用这个结果进行代入计算。

直到只剩下一个数字,停止程序。

#include<iostream>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std;
int rplans[];
char ans[];
bool mns[];
int lv(char c){
switch(c){
case '+':return ;
case '-':return ;
case '*':return ;
case '/':return ;
case '^':return ;
case '(':return ;
case ')':return ;
}
}
int main(){
ios::sync_with_stdio();
cin.tie();cout.tie();
stack<char> skc;
char c;
int fh=,fs=,cnt=,i,j,k,a1,a2;
while((c=getchar())!=EOF&&c!='\n'){
if(c>=''&&c<=''){
if(fs){
mns[cnt]=true;
fs=;
}
else
mns[cnt]=false;
ans[cnt++]=c;
fh=;
}
else{
if(c==')'){
while(skc.top()!='('){
ans[cnt++]=skc.top();
skc.pop();
}
skc.pop();
}
else{
if(c=='('||c=='^')
skc.push(c);
else{
if(c=='-'&&fh)
fs=;
else{
while(!skc.empty()&&lv(skc.top())>=lv(c)){
ans[cnt++]=skc.top();
skc.pop();
}
skc.push(c);
}
}
fh=;
}
}
}
while(!skc.empty()){
ans[cnt++]=skc.top();
skc.pop();
}
cout<<ans[];
for(i=;i<cnt;i++)
cout<<' '<<ans[i];
cout<<endl;
for(i=;i<(cnt-)/;i++){
for(j=;j<cnt;j++)
if(ans[j]=='+'||ans[j]=='-'||ans[j]=='*'||ans[j]=='/'||ans[j]=='^')
break;
for(k=j-;k>=;k--)
if(ans[k]>=''&&ans[k]<=''||ans[k]=='!')
break;
if(ans[k]!='!')
a1=(ans[k]-'')*(mns[k]?-:);
else
a1=rplans[k];
ans[k]='?';
for(k--;k>=;k--)
if(ans[k]>=''&&ans[k]<=''||ans[k]=='!')
break;
if(ans[k]!='!')
a2=(ans[k]-'')*(mns[k]?-:);
else
a2=rplans[k];
ans[k]='?';
if(ans[j]=='+')
rplans[j]=a2+a1;
else if(ans[j]=='-')
rplans[j]=a2-a1;
else if(ans[j]=='*')
rplans[j]=a2*a1;
else if(ans[j]=='/')
rplans[j]=a2/a1;
else
rplans[j]=pow(a2,a1);
ans[j]='!';
for(j=k=;j<cnt;j++){
if(ans[j]!='?'){
if(k)
cout<<' ';
if(ans[j]=='!')
cout<<rplans[j];
else
cout<<ans[j];
k=;
}
}
cout<<endl;
}
return ;
}

ZJNU 1069 - 表达式的转换——中级的更多相关文章

  1. .Net 中表达式的转换

    .Net 中表达式的转换 如: a>0  && (c>a || a <b ) || (a>b || c>1)    转换后  (((a > 0) a ...

  2. swust oj(0088)表达式的转换

    表达式的转换(0088) Time limit(ms): 5000 Memory limit(kb): 65535 Submission: 435 Accepted: 93 Accepted 16级卓 ...

  3. Python与数据结构[1] -> 栈/Stack[1] -> 中缀表达式与后缀表达式的转换和计算

    中缀表达式与后缀表达式的转换和计算 目录 中缀表达式转换为后缀表达式 后缀表达式的计算 1 中缀表达式转换为后缀表达式 中缀表达式转换为后缀表达式的实现方式为: 依次获取中缀表达式的元素, 若元素为操 ...

  4. 洛谷P1175 表达式的转换

    P1175 表达式的转换 44通过 147提交 题目提供者该用户不存在 标签云端 难度提高+/省选- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 这题有毒 抄题解棒责五十! ...

  5. LINQ查询表达式详解(2)——查询表达式的转换

    简介 C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用.具体而言,查询表达式将转换为以下名称的调用:Where.Select.Select ...

  6. 中后缀表达式/洛谷P1175 表达式的转换

    P1175 表达式的转换 思路:先用栈转成中缀表达式,再用栈进行计算.要输出过程,因此计算一次输出一次,但是栈没有迭代器,不好用,换成vector(可以pop_back).虽然表达式求值也可以这么做, ...

  7. SDUT2484算术表达式的转换

    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2484&cid=1182 题目描述 小明在学习了数据结构之后,突然想起了以前没有解决的算术 ...

  8. SDUT2484 算术表达式的转换(表达式树)

    题目链接. 分析: 转换成表达式树,然后先序.中序.后序遍历. AC代码如下: #include <stdio.h> #include <string.h> #define m ...

  9. 洛谷【P1175】表达式的转换

    浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:https://www.luogu.org/problemnew/show/P1175 ...

随机推荐

  1. Docker Python 例子

    版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...

  2. E. Third-Party Software - 2 贪心----最小区间覆盖

    E. Third-Party Software - 2 time limit per test 2.0 s memory limit per test 256 MB input standard in ...

  3. springboot - 映射 HTTP Response Status Codes 到自定义 JSP Error 页面

    1.总览 2.代码 1).pom.xml <dependencies> <dependency> <groupId>org.springframework.boot ...

  4. flutter文本简单实现

    import 'package:flutter/material.dart'; import 'package:flustars/flustars.dart'; import 'package:fl_ ...

  5. P 1015 德才论

    转跳点:

  6. 洛谷 P1470 最长前缀 Longest Prefix

    题目传送门 解题思路: 其实思路没那么难,就是题面不好理解,解释一下题面吧. 就是在下面的字符串中找一个子串,使其以某种方式被分解后,每部分都是上面所给集合中的元素. AC代码: #include&l ...

  7. mongodb安装到配置问题

    一.所有问题 Xshell 连接不上 报错类型:Could not connect to '192.168.122.1' (port 22): Connection failed.原因:IP地址未生成 ...

  8. IDEA的一些常用设置

    一.给方法之间添加分割线 效果: 二.自动导包 三.字体以及大小和行间距 四.注释的字体颜色 五.项目编码 六.省点模式(开启省点模式后会取消代码检查和提示等,需要注意) 七.代码垂直或者水平分区显示 ...

  9. PAT Advanced 1076 Forwards on Weibo (30) [图的遍历,BFS,DFS]

    题目 Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and ...

  10. Python logging模块 控制台、文件输出

    步骤 导入logging模块 设置level(此处是DEBUG) 添加文件handler和流handler import logging logger=logging.getLogger(__name ...