hdu1237简单表达式求值(我多判断了())
来源:互联网 发布:网易镜像站下载linux 编辑:程序博客网 时间:2024/06/16 17:27
简单计算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21981 Accepted Submission(s): 7925
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 24 + 2 * 5 - 7 / 110
Sample Output
3.0013.36
Source
浙大计算机研究生复试上机考试-2006年
ps:参考算法笔记
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <stack>#include <queue>#include <map>using namespace std;typedef long long LL;using namespace std;#define INF 0x3f3f3f3f#define mod 1000000007#define N 1100struct node{ char op; double num; int flog;}t,sum;char ch[N];stack<node>s;queue<node>q;map<char,int>mp;void change(){ int len=strlen(ch); for(int i=0;i<len;) { if(ch[i]==' ') { i++; continue; } else if(ch[i]>='0'&&ch[i]<='9') { t.num=(ch[i]-'0'); t.flog=1; i++; while(ch[i]>='0'&&ch[i]<='9') { t.num=t.num*10+ch[i++]-'0'; } q.push(t); } else if(ch[i]=='('||ch[i]==')') { if(ch[i]=='(') { t.flog=0; t.op='('; s.push(t); } else { while(!s.empty()&&s.top().op!='(') { q.push(s.top()); s.pop(); } s.pop(); } i++; } else { t.flog=0; while(!s.empty()&&s.top().op!='('&&mp[ch[i]]<=mp[s.top().op]) { q.push(s.top()); s.pop(); } t.op=ch[i++]; s.push(t); } } while(!s.empty()) { q.push(s.top()); s.pop(); }}double cal(){ double t1,t2; while(!q.empty()) { t=q.front(); q.pop(); if(t.flog==1) s.push(t); else { t2=s.top().num; s.pop(); t1=s.top().num; s.pop(); sum.flog=1; if(t.op=='-') sum.num=t1-t2; if(t.op=='+') sum.num=t1+t2; if(t.op=='*') sum.num=t1*t2; if(t.op=='/') sum.num=t1/t2; s.push(sum); } } return s.top().num;}int main(){ mp['+']=mp['-']=1; mp['*']=mp['/']=2; while(gets(ch)) { if(ch[0]=='0'&&strlen(ch)==1) break; while(!s.empty()) s.pop(); change(); printf("%.2lf\n",cal()); }}
阅读全文
0 0
- hdu1237简单表达式求值(我多判断了())
- hdu1237(表达式求值)
- hdu1237简单的计算器(栈)
- hdu1237 简单计算器 (模拟+栈)
- hdu 1237 简单计算器(表达式求值)
- hdu1237简单计算器(栈的简单运用)
- 简单计算器求值(中缀表达式转化成后缀表达式)
- 算术表达式的合法性判断与求值(上)
- 算术表达式的合法性判断与求值(下)
- 表达式求值(上)
- 表达式求值(中)
- 表达式求值(下)
- 四则运算(表达式求值)
- 表达式求值(char)
- 表达式求值(nyoj305)
- 表达式求值(一)
- 表达式求值(二)
- 表达式求值(nyoj305)
- OpenCV函数threshold的使用
- jqGrid初级入门知识整理
- 弟弟的作业
- luogu1004 【2000提高】方格取数(dp)
- opencv石头剪刀布
- hdu1237简单表达式求值(我多判断了())
- mysql sql语句总结
- 存储过程
- arm linux 安装 ettercap
- hardway learning python 0730
- java系统学习(1、基础知识了解)
- windows下搭建nexus环境
- Restaurant (背包问题)
- 观建军90周年阅兵之感悟