首页 > 其他分享 >P1449 后缀表达式

P1449 后缀表达式

时间:2024-04-08 22:24:59浏览次数:23  
标签:cha 后缀 P1449 num numa numb 表达式

P1449 后缀表达式

题目

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

本题中运算符仅包含 $\texttt{+-*/}$。保证对于 $\texttt{/}$ 运算除数不为 0。特别地,其中 $\texttt{/}$ 运算的结果需要向 0 取整(即与 C++ / 运算的规则一致)。

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

输入

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

输出

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

样例 1

输入

3.5.2.-*7.+@

输出

16

样例 2

输入

10.28.30./*7.-@

输出

-7

思路

先定义几个变量和数组,当输入不等于 @ 时,就进行加减乘除等操作,最后输出答案即可。


代码

#include<bits/stdc++.h>
using namespace std;
stack<int>num;
int Num,num2,flag=0,i,numa,numb;
char Ch,str[10005],ccty[25];
int Makenum()
{
	int ret=0;
	for(int i=0; i<=strlen(ccty)-1; i++)
	{
		if(ccty[i]=='*')
			break;
		ret=ret*10+ccty[i]-'0';
		ccty[i]='*';
	}
	return ret;
}
int main()
{
	cin>>str;
	char cha;
	cha=str[0];
	int k=0;
	while(cha!='@') // '@' 是结束输入,所以不是 '@' 时进行下列操作
	{
		if(flag==0)
			i=0;
		if(cha>='0'&&cha<='9')
		{
			flag=1;
			ccty[i]=cha;
			i++;
		}
      // '.' 代表每个数字之间的分隔,如果是 '.' 那么将前面的数字存在栈中
		if(cha=='.')
		{
			flag=0;
			Num=Makenum();
			num.push(Num);
		}
      // 开始进行加减乘除等运算
		if((cha<'0'||cha>'9')&&cha!='.')
		{
			numa=num.top();
			num.pop();
			numb=num.top();
			num.pop();
			if(cha=='+')
				num.push(numb + numa);
			if(cha=='-')
				num.push(numb - numa);
			if(cha=='*')
				num.push(numb * numa);
			if(cha=='/')
				num.push(numb / numa);
		}
		k++;
		cha = str[k];
	}
	cout<<num.top()<<endl;
	return 0;
}

标签:cha,后缀,P1449,num,numa,numb,表达式
From: https://www.cnblogs.com/IronMan-PZX/p/18122784

相关文章

  • C++中lambda表达式介绍
    c++在c++11标准中引入了lambda表达式,一般用于定义匿名函数,使得代码更加灵活简洁。lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。什么是Lambda表达式最常见的lambda的表达式写法如下autoplus=[](intv1,int......
  • LeetCode. 逆波兰表达式求值
    根据 逆波兰表示法,求该后缀表达式的计算结果。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为0的情况。示例 1:输入:t......
  • Gerber文件后缀含义
    Gerber文件后缀含义GTL—toplayer顶层GBL—bottomlayer底层GTO—TopOverlay顶层丝印层GBO—Bottomlayer底层丝印层GTP—TopPaste顶层表贴(做激光模板用)GBP—BottomPaste底层表贴GTS—Topsolder顶层阻焊(也叫防锡层/绿油,负片)GBS—BottomSolder底层阻焊G1—Midlayer1内......
  • 使用 AI 生成正则表达式,告别正则烦恼
    如果你有处理正则表达式的需求,那么这个网站(autoregex.xyz)一定要收藏好。可以根据文字描述生成正则表达式。默认是从文字到正则,不用选择。输入框中输入描述,点击”GO“按钮。等待一会儿,即可生成正则表达式。还可以解析给定的正则,说明其含义。切换成从正则到文字,然......
  • 【Kotlin】Lambda表达式
    1常规调用​Lambda表达式总结中对Java的Lambda表达式进行了总结,本文将对Kotlin中的Lambda表达式进行总结。1.1无参函数funmain(){varmyFun:()->Unit={println("test")}myFun()//打印:test}​以上代码等价于:funmai......
  • 如何在JavaScript中解析S表达式
    S表达式是Lisp编程语言家族的基础。在本文中,我将逐步向您展示如何创建一个简单的S表达式解析器。这可以作为Lisp解析器的基础。Lisp是实现最简单的语言之一,创建解析器是第一步。我们可以使用解析器生成器来完成这项任务,但自己编写解析器会更容易。我们将使用JavaScript。(本文内......
  • 如何在表单中使用正则表达式校验中文姓名
    在表单中,经常需要对用户输入进行校验以确保数据的准确性和完整性。在某些情况下,我们可能需要使用正则表达式来实现特定的验证规则。本文将介绍如何在表单中使用正则表达式校验中文姓名。正则表达式简介正则表达式是一种强大的模式匹配工具,它可以用来检查一个字符串是否与某种......
  • Python学习(七):基础运算符与表达式【详解】
    文章目录python基础运算符与表达式运算符与表达式的优先级算术运算符(四则运算)算术运算符(取余/模、乘方)关系比较运算符位运算符逻辑运算符赋值运算符、复合赋值运算符条件表达式await序列切片表达式星号表达式yield表达式lambda表达式python基础运算符与表达式运算符......
  • 2024-04-07 记录win10批量修改文件后缀的方法 ==》ren *.exe *.zip
    使用ren命令,注意是win10系统在需要修改后缀名的文件夹路径打开cmd,如: 比如我想把这些exe文件修改为zip后缀,现在路径打开cmd,然后输入命令:ren*.exe*.zip注意该命令会把当前文件夹内所有的.exe后缀批量改成.zip,如果是重要文件,请先备份,以防丢失。 以上没有报错表示成功,如......
  • linux扩展正则表达式()
    1.()含义linux扩展正则表达式()含义是找出“用户组”字符串;此外,()还可以用来作为“多个重复用户组”的识别2.样例命令1:grep-nE'p(wp|lp|np|dp)o'anaconda-ks.cfgORegrep-n 'p(wp|lp|np|dp)o'anaconda-ks.cfg#搜索包含(pwpo)、(plpo)、(pnpo)、(pdpo)字符串的行,因......