首页 > 其他分享 >PTA 后缀式求值(整型版)

PTA 后缀式求值(整型版)

时间:2024-03-23 13:32:56浏览次数:24  
标签:输出 中缀 后缀 样例 PTA 整型 && 求值

我们人类习惯于书写“中缀式”,如 3 + 5 * 2 ,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)

而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是: 3 5 2 * +

现在,请对输入的后缀式进行求值。为了简化输入处理和运算,运算数(操作数)不超过30个且均为不超过5位的正整数,运算符(操作符)仅有+ - * /(加减乘除)四种。题目保证运算的中间结果和最终结果都在整型范围内,且不会出现除数为0的情况

输入格式:

第一行给出一个不超过10的正整数k;

接下来k行,每行给出一个后缀式,以=号结束,运算符、运算数和=号之间均以一个空格间隔。

输出格式:

输出有k行,对于所输入的每个后缀式,判断是否正确(可求值),并在一行里输出:

  • 如果后缀式无误、可求值,输出结果
  • 如果后缀式错误,则输出Expression Error!

输入样例1:

2
1 2 3 4 + - * =
10 2 3 + / 4 * 5 - =

输出样例1:

-5
3

输入样例2:

2
10 2 / =
10 2 + - =

输出样例2:

5
Expression Error!

解题思路:用栈存数字,然后判断加减乘除,做完操作后放入栈

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin>>t;
	string s;
	while(t--){
		int f=0;
		stack<int> sz;
		while(cin>>s&&s!="="){
			if(f==1)continue;
			if(s!=" "&&s!="+" &&s!="-" &&s!="*" &&s!="/"){
				sz.push(stoi(s));
			}else if(s!=" "){
				if(sz.size()<=1){
					cout<<"Expression Error!"<<endl;
					f=1;
					continue;
				}
				int a=sz.top();
				sz.pop();
				int b=sz.top();
				sz.pop();
				if(s=="+"){
					sz.push(b+a);
				}
				if(s=="-"){
					sz.push(b-a);
				}
				if(s=="*"){
					sz.push(b*a);
				}
				if(s=="/"){
					sz.push(b/a);
				}
			}
		}
		if(f==0 &&sz.size()==1)cout<<sz.top()<<endl;
		else if(sz.size()>1)cout<<"Expression Error!"<<endl;
	}
	return 0;
} 

标签:输出,中缀,后缀,样例,PTA,整型,&&,求值
From: https://blog.csdn.net/2302_81344882/article/details/136846112

相关文章

  • iptables-save 命令使用总结
    转载请注明出处:iptables-save 命令在Linux系统中用于将当前运行的 iptables 防火墙规则导出到一个文件中。这对于备份规则、迁移规则或在不同系统间共享规则配置非常有用。基本用法基本用法是将当前的 iptables 规则保存到文件中,如下所示:iptables-save>/pat......
  • PTA:7-68 Redemption
    作者 郭天宸单位 山东大学(威海)Iamdreadfullysorryforyourbadexperience,suchalownumberofsubmissionsaswellaspassratesandmy inSHIZHANYI.Isetupsomechallengingdatapointsandsomealittltbithardproblems.Ifyouareintere......
  • PTA:7-66 华氏温度转换为摄氏温度
    作者 伍建全单位 重庆科技大学输入一个华氏温度,输出摄氏温度,其转换公式为:C=5(F-32)/9。输入格式:输入一个浮点型的华氏温度值。输出格式:输出摄氏温度。输入样例:在这里给出一组输入。例如:96输出样例:在这里给出相应的输出。例如:35.555556代码长度限制16KB......
  • PTA:7-73 n个小朋友分糖果
    作者 庄波单位 山东航空学院为了培养小朋友们分享的意识,老师教小朋友做分糖果的游戏,把自己带的糖果分给其他小朋友。首先,全班 n 个小朋友围成一个大圆圈,按排列顺序依次给他们编号 1,2,…,n。然后,从 1 号小朋友开始,将自己的糖果平均分成三份(如果有多余的糖果则立即吃......
  • ptaL2-008manachar做法
    之前考虑过如果输入样例很大怎么办,但是没有细想,今天看了看manachar,懊悔如果这个题样例增大一些变成L330分就好了hh,相比于洛谷上的模板题,这个题唯一不一样的就是有空格,所以不能再用char数组来保存,改用string来存储,C++中的getline函数前几天刚了解到正好也派上用场了constin......
  • 代码随想录算法训练营第十一天| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项
    题目:20.有效的括号文章链接:代码随想录视频链接:LeetCode:20.有效的括号题目链接:力扣题目链接图释:classSolution{public://有效的括号boolisValid(strings){ //遇到左括号时就放入右括号,遇到右括号时,与栈内的顶元素进行比较 //情况一:与栈顶元素相等,则是t......
  • 150. 逆波兰表达式求值c
    intf(inta,intb,charc){if(c=='+')returna+b;if(c=='-')returna-b;if(c=='/')returna/b;returna*b;}intevalRPN(char**tokens,inttokensSize){int*stack=(int*)malloc(sizeof(int)*tokensSize);......
  • PTA 打卡 3.18
    7-1新胖子公式#include<bits/stdc++.h>usingnamespacestd;intmain(){floath,w,t;cin>>w;cin>>h;t=w/(h*h);printf("%.1f\n",t);if(t>25.0)cout<<"PANG";elsecout&......
  • 表达式求值
    #include<iostream>#include<unordered_map>usingnamespacestd;constintN=10010;charop[N];intnum[N];intidx1=-1,idx2=-1;//模拟栈voidcal(){intb=num[idx2--];inta=num[idx2--];//注意a,b顺序charc=op[idx1--];intx=0;i......
  • 循环控制:(第4题)有关区分字符型与整型的题目
    1.题目再现:2.题目分析:这道题主要解决的问题非常明显。1.区分输入的是字符还是整型数据 2.区分是正数还是负数3.利用循环求出桃子数。(1)针对问题一这里先补充一下scanf的三种返回值:1.输入成功:返回输入成功的变量个数2.输入失败:类型不匹配,就会返回0 3.缓冲区中没有数据......