hdu 1237(简单计数器)
来源:互联网 发布:网络有关的电影 编辑:程序博客网 时间:2024/06/18 12:51
题意:输入一个算术表达式,求值(数字为整数,但结果不一定是整数,不存在不合法的输入)。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237
——>>这是中缀表达式的运算。开两个栈,一个用来存操作数,一个用来存运算符。定义3个级别,# 的级别最低,+ 和 - 的级别相同且高于 #,* 和 / 的级别相同且高于 + 和 - ,先往运算符栈放入一个 # ,表达式最后也加一个 #,读表达式,若读到数字,则以数字类型输入,直接放入操作数栈,若读到的是运算符,则比较读到的运算符与运算符栈顶符号的级别,若比栈顶的高,则入栈,否则,从数栈取两个操作数进行运算符栈顶元素的运算,再把结果压入数栈,刚刚读到的运算符再与现在运算符栈顶元素的级别进行比较……最后数剩下的一个元素,就是结果。
代码如下:
/* * 1237_5.cpp * * Created on: 2013年8月7日 * Author: Administrator * 就算成为不了章泽天的男朋友,也要成为她的校友。。。。 * fighting!!!!! */#include <iostream>#include <stack>#include <cstdio>using namespace std;int priority(char c) {if (c == '#') {return 1;} else if (c == '+' || c == '-') {return 2;} else if (c == '*' || c == '/') {return 3;}return -1;}double cal(double a, double b, char c) {if (c == '+') {return a + b;} else if (c == '-') {return a - b;} else if (c == '*') {return a * b;} else if (c == '/') {return a / b;}return -1;}int main() {char s[210];while (cin.getline(s, sizeof(s))) {if (strcmp(s, "0") == 0) {break;}int len = strlen(s);s[len++] = ' ';s[len++] = '#';s[len] = 0;stack<double> digit;stack<char> f;f.push('#');for (int i = 0; i < len; ++i) {if (s[i] == ' ') {continue;}if (isdigit(s[i])) {double temp;sscanf(s + i, "%lf", &temp);digit.push(temp);while (isdigit(s[i + 1])) {i++;}} else {bool ok = 1;while (ok) {if (priority(s[i]) > priority(f.top())) {f.push(s[i]);ok = 0;} else {if (s[i] == '#' && f.top() == '#') {break;}double b = digit.top();digit.pop();double a = digit.top();digit.pop();char c = f.top();f.pop();double ret = cal(a, b, c);digit.push(ret);}}}}double result = digit.top();printf("%.2lf\n", result);while (!f.empty()) {f.pop();}while (!digit.empty()) {digit.pop();}}}
- hdu 1237(简单计数器)
- 简单计数器
- 简单计数器
- 简单ASP计数器
- 简单的计数器
- 简单的计数器(jsp)
- 一个简单的计数器
- BlackBerry简单计数器
- 简单的计数器
- PHP简单计数器
- jsp简单计数器
- 简单的计数器
- javaBean实现简单计数器
- 简单的cookie计数器
- Chronometer实现简单计数器
- jsp简单页面计数器
- 简单的计数器程序
- 简单的访问计数器
- 二叉查找树 Java实现
- java 正则表达式
- JAVA之包装类Integer详解
- ajax请求在ie下缓存的处理
- [日志]CSDN入住
- hdu 1237(简单计数器)
- 几种防止对数据“过分”挖掘的方法
- asp.net实现动态显示当前日期时间——用asp自己封装的AJAX
- Java IO 相关的知识点小结
- 2.前言(cocos2d-x环境搭建 android篇)
- [leetcode] First Missing Positive
- 编译原理及实践教材TINY编译器代码解析
- poj 1141 brackets sequence
- 软件天才与技术民工