NYOJ - 35 表达式求值 分类: NYOJ 2015-03-18 10:33 31人阅读 评论(0) 收藏
#include<iostream>
#include<string>
#include<stack>
#include<cstdio>
using namespace std;
stack<double>sn;
stack<char>sc;
double num, des, dou;
bool prt, flag;
int t, len;
string str;
bool isNum(char c)
{
if(c >= '0' && c <= '9')
return true;
if(c== '.')
{
flag = true;
return true;
}
return false;
} bool isOp(char c)
{
if(c == '+' || c == '-' || c == '*' || c == '/')
return true;
return false;
} void init()
{
while(sn.size()) sn.pop();
while(sc.size()) sc.pop();
str.clear();
len = num = des = 0;
dou = 1;
prt = false;
flag = false;
} void calm()
{
if(sc.size() && isOp(sc.top()))
{
double ans;
double y = sn.top();
sn.pop();
double x = sn.top();
sn.pop();
char op = sc.top();
sc.pop();
switch(op)
{
case '+': ans = x + y; break;
case '-': ans = x - y; break;
case '*': ans = x * y; break;
case '/': ans = x / y; break;
}
// cout<<op<<" "<<ans<<endl;
sn.push(ans);
} } int main()
{
// freopen("in.in","r",stdin);
cin>>t;
while(t--)
{
init();
cin>>str;
int len = str.length(); for(int i = 0; i < len; i++)
{
if(isNum(str[i]))
{
if(str[i] == '.') continue;
if(!flag) num = num*10 + str[i] - '0';
else{
des = des*10 + str[i] - '0';
dou *= 10;
}
}
else
{
num = num + des/dou;
if(str[i] == '+' || str[i] == '-')
{
if(!prt) sn.push(num);
while(sc.size() && sc.top() != '(')calm();
sc.push(str[i]);
prt = false;
}
else if(str[i] == '*' || str[i] == '/')
{
if(!prt) sn.push(num);
if(sc.size())
if(sc.top()=='*' || sc.top()=='/')
calm();
sc.push(str[i]);
prt = false;
}
else if(str[i] == '(')
{
sc.push(str[i]);
}
else if(str[i] == ')')
{
if(!prt) sn.push(num);
while(sc.top() != '(') calm(); sc.pop();
prt = true;
}
else
{
if(!prt) sn.push(num);
while(sn.size() > 1) calm();
printf("%0.2lf\n",sn.top());
sn.pop();
break;
}
num = 0;
flag = false;
dou = 1;
des = 0;
}
}
} return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
NYOJ - 35 表达式求值 分类: NYOJ 2015-03-18 10:33 31人阅读 评论(0) 收藏的更多相关文章
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...
- 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏
文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...
- 积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏
积分图像(integral image)是一种快速计算矩形区域之和的数据结构,常利用它对算法进行加速.积分图像中处的值是原始灰度图像的左上角与当前点所围成的矩形区域内所有像素点的灰度值之和,即: 其中 ...
- makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏
一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...
- HDU 1532 Drainage Ditches 分类: Brush Mode 2014-07-31 10:38 82人阅读 评论(0) 收藏
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- C#中的线程(上)-入门 分类: C# 线程 2015-03-09 10:56 53人阅读 评论(0) 收藏
1. 概述与概念 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为"主线 ...
- C#多线程(下) 分类: C# 线程 2015-03-09 10:41 153人阅读 评论(0) 收藏
四.多线程的自动管理(线程池) 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPool(线 ...
- iOS8 UISearchViewController搜索功能讲解 分类: ios技术 2015-07-14 10:23 76人阅读 评论(0) 收藏
在iOS8以前我们实现搜索功能需要用到UISearchbar和UISearchDisplayController, 在iOS8之后呢, UISearchController配合UITableView的 ...
- iOS开发:创建真机调试证书 分类: ios相关 2015-04-10 10:22 149人阅读 评论(0) 收藏
关于苹果iOS开发,笔者也是从小白过来的,经历过各种困难和坑,其中就有关于开发证书,生产证书,in_house证书,add_Hoc证书申请过程中的问题,以及上架发布问题.今天就着重说一下关于针对于苹果 ...
随机推荐
- I - Nice to Meet You
传送门 和10-17 B 君的第三题 类似,应该算是简化版,给出了固定的点. f[s]表示只考虑连端都在s集合中的边,s中的固定点(1或者2)能到达整个集合的方案数. 预处理c[s]表示s集合中的总边 ...
- (转)微信,QQ这类IM app怎么做——谈谈Websocket
转:http://www.cocoachina.com/ios/20160527/16482.html 前言 关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕 ...
- 超好用的thinkphp5.0/thinkphp5.1分页插件!详细使用步骤(内附代码)
效果 tp5.0使用方法 page下载地址:进入下载页面 提取码:s75k 1,把page文件夹整个目录复制到 目录extend下 2,修改默认配置 app/config.php 把里面的 'pagi ...
- 校验文件是否是同一个文件,以及mac中使用MD5命令
背景 sz了war包,因为查看不到里面的内容,并不确定是否是同一个文件. 解决 通过MD5校验 md5sum xxxx 但是在mac中是没有这个命令的下载半天没下载下来,下面是快捷操作. 1.打开终端 ...
- 2 USB标准请求
2 USB标准设备请求的结构 2.1 标准请求 bmRequestType 的D6~D5为00的请求,USB协议定义了11个标准请求(bRequest),其名字与相应的bRequest的值如下表: 表 ...
- 2018 ECNA Regional Contest J. Watch Where You Step
题目链接:Watch Where You Step 题意 给定有向图的邻接矩阵,现在需要给该图增加边,使得如果两点可达必直接可达,求需要加边的数量. 题解 首先,如果给定 \(n\) 个结点的图中任意 ...
- Flink 配置文件详解
前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧. 安装目录下主要有 flink-conf.yaml 配置.日志的配置文件.zk 配置.Fli ...
- (转载) 深入理解ES6箭头函数的this以及各类this面试题总结
声明:本文转载自 https://blog.csdn.net/yangbingbinga/article/details/61424363 ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取 ...
- Java对图片压缩
背景:图片上传服务器时候的大小限制取消之后,上传图片太大导致前台显示加载缓慢 需求:服务器对接收到的图片进行压缩 方法:1.上传后的文件保存在临时文件夹“/usr/upload/tmp” 2.压 ...
- 深入分析Synchronized原理
前言 记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决 ...