NYOJ 128 前缀式计算
前缀式计算
- 描述
-
先说明一下什么是中缀式:
如2+(3+4)*5这种我们最常见的式子就是中缀式。
而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))
然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )
把括号去掉就是:+ 2 * + 3 4 5
最后这个式子就是该表达式的前缀表示。
给你一个前缀表达式,请你计算出该前缀式的值。
比如:
+ 2 * + 3 4 5的值就是 37
- 输入
- 有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。
以EOF为输入结束的标志。 - 输出
- 对每组数据,输出该前缀表达式的值。输出结果保留两位小数。
- 样例输入
-
+ 2 * + 3 4 5
+ 5.1 / 3 7 - 样例输出
-
37.00
5.53 前缀式计算:从后往前遍历,遇到数字压入栈,遇到符号,弹出两个数字,计算(第一个操作数为先出栈的数),然后压入栈。
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
double calPerfix(char *input)
{
stack<double> result;
int len = strlen(input) - ;
int n,j,i;
while (len >= )
{
j = len;
double sum = 0.0,dot = 0.0;
if (len == ){
j = ;
n = j;
}
else {
while (input[j] != ' ')
j--;
n = j+;
}
if (input[n] >= '' && input[n] <= ''){
for (i=n; i <= len; i++)
{
if(input[i] >= '' && input[i] <= '')
{
double num = input[i] - '';
sum = sum * + num;
}
else if (input[i] == '.')
{
int l = ;
dot = 0.0;
for (int k=i+; k <= len; k++ )
{
if(input[k] >= '' && input[k] <= '')
{
double num = input[k] - '';
dot += num / l;
l *= ;
i++;
}
}
}
}
sum += dot;
result.push(sum);
}
else {
double one;
switch (input[n])
{
case '+':
sum = result.top();
result.pop();
one = result.top();
result.pop();
sum += one;
result.push(sum);
break;
case '-':
sum = result.top();
result.pop();
one = result.top();
result.pop();
sum -= one;
result.push(sum);
break;
case '*':
sum = result.top();
result.pop();
one = result.top();
result.pop();
sum *= one;
result.push(sum);
break;
case '/':
sum = result.top();
result.pop();
one = result.top();
result.pop();
sum /= one;
result.push(sum);
break;
default:
break;
}
}
len = j - ;
}
return result.top();
}
int main()
{
char input[];
while(gets(input)){
printf("%.2f\n",calPerfix(input));
fflush(stdin);
}
return ;
}
NYOJ 128 前缀式计算的更多相关文章
- NYOJ 128 前缀表达式的计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
- NYOJ128前缀式计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
- NYOJ128 前缀式计算 【栈】
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 先说明一下什么是中缀式: 如2+(3+4)*5这样的我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上 ...
- 前缀式计算 nyoj
题目描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括号就是:(2+((3+4)*5)) 然后把运算符写到括号前面就是+(2 *( +(3 ...
- NYOJ128 前缀式计算(栈的运用)
题目信息: http://acm.nyist.net/JudgeOnline/problem.php? pid=128 + 2 * + 3 4 5的值就是 37,详见输入输出. 输入 有多组測试数据, ...
- NYOJ--128--前缀式计算(表达式求值)
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...
- nyoj-----前缀式计算
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀 ...
- 搜索广告与广告网络Demand技术-流式计算平台
流式计算平台-Storm 我们以Storm为例来看流式计算的功能是什么. 下面内容引用自大圆的博客.在Storm中,一个实时应用的计算任务被打包作为Topology发布,这同Hadoop的MapRed ...
- 流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15
上篇的内容,我们探讨了分布式计算中的MapReduce与批处理.所以本篇我们将继续探索分布式计算优化的相关细节,并且分析MapReduce与批处理的局限性,看看流式计算是否能给我们在分布式计算层面提供 ...
随机推荐
- tar+gzip
tar打gzip包: tar -czvf sourceDir.tar.gz sourceDir tar查看压缩包内容: tar -tvf sourceDir.tar.gz tar解压缩包crontab ...
- Linux字符串替换一例:根据IP地址获取指定内容
需求:使用脚本获取到本机IP地址,需要添加iptables规则,需生成网段地址 源格式:获取IP地址为10.10.10.221 目标格式:10.10.10.0 # 方法1 [hadoop@localh ...
- HDU 5724:Chess(博弈 + 状压)
http://acm.hdu.edu.cn/showproblem.php?pid=5724 Chess Problem Description Alice and Bob are playing ...
- ecshop后台通过ajax搜索原理
ecshop的搜索其实是功能十分强大的,但是ecshop搜索功能前台和后台还不大一样,前台主要是通过get方式,提交的url进行分页,而在ecshop的后台,则是接受表单的搜索条件,然后通过js发布到 ...
- Java transient关键字序列化时使用小记
1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...
- JS获取非行间样式
我们都知道用offset函数获取元素样式是一件很方便的事,但是offset只能获取行间样式,而无法获得非行间样式,这是它的瓶颈所在. 我们都知道js获取行间样式的方法,那么js是如何获取行距样式的呢? ...
- HDU 4707:Pet
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Babelfish 分类: 哈希 2015-08-04 09:25 2人阅读 评论(0) 收藏
Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 36398 Accepted: 15554 Descripti ...
- 验证码识别--type5
验证码识别--type5 每一种验证码都是由人设计出来.在设计过程中,可能由于多个方面的原因,造成了这样或那样的可以被利用的漏洞.验证码识别,首先需要解决的问题就是发现这些漏洞--然后利用漏洞解决问题 ...
- 如何让其他计算机访问我的计算机上数据库mysql
第一种:能ping通,说明你们在同一个网络中,可以直接访问.你只要在你的登录用户中的帐号加上可外部访问就可以了...也就是授权.比如你的帐号是root 你可以进入mysql后, 你可以看到,每个帐 ...