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证书申请过程中的问题,以及上架发布问题.今天就着重说一下关于针对于苹果 ...
随机推荐
- eclipse中server name选项变灰
删除workspace中.metadata\.plugins\org.eclipse.core.runtime\.settings目录下 org.eclipse.wst.server.core.pre ...
- Vi/Vim查找,替换,统计使用方法
Vi/Vim查找替换使用方法 vi/vim 中可以使用 :s 命令来替换字符串.该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询. 可以使用 # 作为分隔符,此时中间出现 ...
- Sql生成 Insert 语句
declare @TableName sysname select @TableName = 'T_OOSOrder' declare @result varchar(max) = 'INSERT I ...
- 【SVN】提交报错:×××文件is not under version control
解决方法:1.删除出错的文件,然后在出错文件所在文件夹执行还原操作 2.VS中可将文件先排除在项目外,再包含在项目内,即可正常提交
- pefile解析PE格式
import os,sys import pefile import pydasm import struct #print sys.argv def show_section(pe): print ...
- Xen的体系结构
1. BIOS的虚拟化 xen的启动过程,与x86系统一样,首先要进入保护模式,然后安装中断处理程序. xen的中断处理程序可以分为几种,有的是直接分发给正在运行的操作系统,有的是分发给安装了硬件驱动 ...
- 牛客 判断t1树中是否含有与t2树拓扑结构完全相同的子树
题目链接:https://www.nowcoder.com/practice/5a41ce17e8194e1688aa83a73137f7ee?tpId=101&tqId=33239& ...
- spring 中 isolation 和 propagation 详解
可以在XML文件中进行配置,下面的代码是个示意代码 <tx:advice id="txAdvice" transaction-manager="txManager& ...
- DFS问题举例:N个整数选k个使其和为x
N个整数选k个使其和为x,若有多个方案,选择元素平方和最大的一个 #include<cstdio> #include<cmath> #include<cstring> ...
- 36-Ubuntu-用户管理-01-新建用户useradd
创建用户/设置密码/删除用户/确认用户信息 序号 命令 作用 说明 01 sudo useradd -m -g 组名 新建用户名 添加新用户 -m 自动建立用户家目录 -g 指定用户所在的组,否则会建 ...