#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) 收藏的更多相关文章

  1. 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏

    也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...

  2. 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏

    文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...

  3. 积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏

    积分图像(integral image)是一种快速计算矩形区域之和的数据结构,常利用它对算法进行加速.积分图像中处的值是原始灰度图像的左上角与当前点所围成的矩形区域内所有像素点的灰度值之和,即: 其中 ...

  4. makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏

    一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...

  5. 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) ...

  6. C#中的线程(上)-入门 分类: C# 线程 2015-03-09 10:56 53人阅读 评论(0) 收藏

    1.     概述与概念 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为"主线 ...

  7. C#多线程(下) 分类: C# 线程 2015-03-09 10:41 153人阅读 评论(0) 收藏

    四.多线程的自动管理(线程池) 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPool(线 ...

  8. iOS8 UISearchViewController搜索功能讲解 分类: ios技术 2015-07-14 10:23 76人阅读 评论(0) 收藏

    在iOS8以前我们实现搜索功能需要用到UISearchbar和UISearchDisplayController, 在iOS8之后呢, UISearchController配合UITableView的 ...

  9. iOS开发:创建真机调试证书 分类: ios相关 2015-04-10 10:22 149人阅读 评论(0) 收藏

    关于苹果iOS开发,笔者也是从小白过来的,经历过各种困难和坑,其中就有关于开发证书,生产证书,in_house证书,add_Hoc证书申请过程中的问题,以及上架发布问题.今天就着重说一下关于针对于苹果 ...

随机推荐

  1. 对Map的key按升序进行排序

    //对Map的key按升序进行排序 List<Map.Entry<Integer,Task>> mappingList = new ArrayList<Map.Entry ...

  2. C#网页数据采集(三)HttpWebRequest

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  3. 介绍Win7 win8 上Java环境的配置

    ① windows 上的 java 环境搭建:(同时适合xp,vasta,win7,win8,win8.1) ② linux 上的java环境搭建(同时适合linux,unix,mac): 本文主要适 ...

  4. 网页压缩--gzip和deflate的区别

    我们在配置网站GZip压缩的时候,会发现有两个模块可以设置的,一个是GZip模块的参数配置,另一个是Deflate模块的参数配置,他们的设置方法是一样的.刚开始时我不太明白,这两地方有什么不同?网站开 ...

  5. CSS实现背景图片固定

    body { background-image:url('bg.jpg'); background-repeat: no-repeat; background-attachment: fixed; / ...

  6. 2.执行计划(explain)分析

    1.使用场景 获取执行计划命令:在select 命令前加上explain 或 desc explain select 或 desc select 1.语句执行之前 :防患于未然 2.出现慢语句时 :亡 ...

  7. exe自启动的几种方式

    1 注册表启动项目RUN (注册路径 HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\Windows\CurrentVersion\Run) 2 计划任务 比较少见这种方式 ...

  8. Python的datetime模块使用

    两个常量 MAXYEAR:9999 MINYEAR:1 五个类 datetime.datetime:日期时间类 datetime.date:日期类 datetime.time:时间类 datetime ...

  9. SDL系列之 - 用SDL动态地画一个圆喽 && 设置背景色

    #include <SDL.h> #include <stdlib.h> #include <string.h> #include <math.h> # ...

  10. python接口自动化(delete请求)

    python接口自动化(delete请求) 一.delete请求的目的:删除资源 二.应用 导包:import requests 调用delete方法:requests.delete(url) 获取响 ...