noi1696 逆波兰表达式
1696:逆波兰表达式
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
- 输入
- 输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
- 输出
- 输出为一行,表达式的值。
可直接用printf("%f\n", v)输出表达式的值v。 - 样例输入
-
* + 11.0 12.0 + 24.0 35.0
- 样例输出
-
1357.000000
- 1、本题的题目错了,这应该是波兰表达式,也叫做前缀表达式。逆波兰表达式是后缀表达式,即操作符在数字的后面
- 2、前缀表达式:http://baike.so.com/doc/6896516-7114163.html
- 前缀表达式的计算方法:从右往左扫描表达式,只要碰到数字就入栈;碰到运算符,弹出栈顶的两个数字运算,注意如果是减号或除号,要用 栈顶数字 除或减 次栈顶数字。
-
3、本题为了方便操作,可以从左往右分别记录了第几个元素是哪个数字或是哪个运算符。分别存储在tmp[]、num[]中,但记录下标时,两个数组共用1个sum。
所以判断第i个是数字还是运算符时,首先给num[]赋一个极值,然后判断如果num[]是极值,那么第i个是运算符,如果不是极值,那就是数字。注意极值不能为0,因为给出的数字可能为04、可以使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在cmath中。待转换的字符串要用char数组存储,一定要注意下标从0开始,小数点也要存到char数组里。例:char a[20]=“123.456”;double l=atof(a);输出结果为123.456
#include<cmath>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#define no -999999999
using namespace std;
char k[];
char s[],tmp[];
double num[];
int l=-,sum,top;
double stack[],ans;
int main()
{
gets(s);
for(int i=;i<=;i++) num[i]=no;//num数组赋极值
for(int i=;i<=strlen(s);i++)
{
if(s[i]==||s[i]==||s[i]==||s[i]==) tmp[++sum]=s[i];//运算符
else if((s[i]>=''&&s[i]<='')||s[i]==) k[++l]=s[i];//数字或者小数点
else if(s[i-]>=''&&s[i-]<='') //只有数字之后的空格才需要把字符串转换成数字
{
num[++sum]=atof(k);
memset(k,'\0',sizeof(k));
l=-;//l从-1开始,因为上面k[++l]=s[i],数组k从0开始赋值
}
}
for(int i=sum;i>;i--)//从右往左扫描
{
if(num[i]!=no) stack[top++]=num[i];//不是极值,是数字,入栈
else //运算符,弹出栈顶两个数字运算
{
double a=stack[--top],b=stack[--top];
switch(tmp[i])
{
case '+':ans=a+b;break;
case '-':ans=a-b;break;
case '*':ans=a*b;break;
case '/':ans=a/b;break;
}
stack[top++]=ans;//运算完结果入栈
}
}
printf("%f\n",stack[]);
}
noi1696 逆波兰表达式的更多相关文章
- 递归--练习10--noi1696逆波兰表达式
递归--练习10--noi1696逆波兰表达式 一.心得 递归大法好 二.题目 1696:逆波兰表达式 总时间限制: 1000ms 内存限制: 65536kB 描述 逆波兰表达式是一种把运算符前置 ...
- [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- AC日记——逆波兰表达式 openjudge 3.3 1696
1696:逆波兰表达式 总时间限制: 1000ms 内存限制: 65536kB 描述 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式 ...
- codevs5164 逆波兰表达式
题目描述 Description 逆波兰表达式是一种把运算符前置的算术表达式(又叫前缀表达式),例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式的优点是运算符之间不必有优先级关系,也 ...
- lintcode 中等题:Evaluate Reverse Polish notation逆波兰表达式求值
题目 逆波兰表达式求值 在逆波兰表达法中,其有效的运算符号包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰计数表达. 样例 ["2", "1&q ...
- SDIBT2666——逆波兰表达式求值
逆波兰表达式求值(栈和队列) Description 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序.规定:逆波兰表达式的长度不超过一行,以@符作为输入结束,操作数之间用空格分隔,操作符只可能有+ ...
- OpenJudge 2694 逆波兰表达式
1.链接地址: http://bailian.openjudge.cn/practice/2694/ 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 逆波兰表达式是一种把运算 ...
- 逆波兰表达式 java
描述 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式的优点是运算符之间不必有优先级关系, 也不必用括号改变运算次序,例如(2 + 3) ...
- c++实现将表达式转换为逆波兰表达式
https://github.com/Lanying0/lintcode 所属: 数据结构->线性结构->栈 问题: 给定一个表达式字符串数组,返回该表达式的逆波兰表达式(即去掉括号). ...
随机推荐
- Git 的 .gitignore 配置
.gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得. 1.配置语法: 以斜杠“/”开头 ...
- Google Nexus5在linux下刷原生安卓 android6.0
之前将Nexus5刷成了MIUI系统,现在想体验一下安卓6.0,网上都是windows的教程,但如何在linux下刷机呢? 首先准备环境和工具: 1. 我的linux系统是lubuntu 15.10 ...
- FATAL ERROR: Could not find ./bin/my_print_defaults的解决办法
对mysql数据库初始化过程中,会有如下报错信息: 1 2 3 4 5 6 7 [root@localhost scripts]# ./mysql_install_db --user=mysql FA ...
- Qt 怎么添加图片文件?
1.新建一个.qrc的文件 2.起个.qrc的文件名 3.完成后,添加图片文件 4.如图 就好了.
- C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
C/C++中不同数据类型所占用的内存大小 32位 64位 char 1 1 int ...
- Assembly - Registers
Processor operations mostly involve processing data. This data can be stored in memory and accessed ...
- 突然发现这周有点忙。。着玩-PHP进阶
hi 周二才,不过我突然意识到这周有点忙着玩的感觉,还是很期待的——今天下午去市里,晚上回来看电影,明晚聚餐吃火锅,后天下午拍短片,晚上可能要打球,周五,嗯,就到周五了.虽然这样下去连怎么写(bian ...
- ImageMagick Remote Command Execute
CVE ID: CVE-2016-3714 我挺纠结应该用中文写博客还是应该用英文写博客.英文吧作用挺明显的,可以锻炼自己的英语表达能力,但是可能会阻碍和一些英文不好的朋友交流. It's upset ...
- Java开发之Servlet生命周期
Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器结束的时候结束生命周期.无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servle ...
- 《Writing Idiomatic Python》前两部分的中文翻译
汇总了一下这本小书前两部分的内容: 翻译<Writing Idiomatic Python>(一):if语句.for循环 翻译<Writing Idiomatic Python> ...