C——简单计算器(HDU1237)
Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36 解题思路:
虽然用数组也可以解决这一类题,但在这里我使用栈来解答这一题。
显然这是一个模拟题。首先把数字和符号分别放入栈中;
计算部分首先计算乘除法,并把计算的结果放入栈内,如果遇到加减号则把数字和符号分别放入另一个栈中
此时另一个栈中就只有加减法,再计算加减法,得到计算结果。(注意计算顺序)
#include <iostream>
#include<stack>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std; int main()
{
int i,j,h,g=,d,b,q;
double ans,x1,x2,k;
char a[];
while ()
{
memset(a,,sizeof(a));
k=;h=;ans=;d=,b=;g=;
gets(a);
if (strlen(a)==&&a[]=='')break;
stack<char>f,f2;
stack<double>s,s2;
queue<char>f1;
queue<double>s1;
for (i=;i<strlen(a);i++)
{
if (a[i]==' '){h++;continue;} //分离数字和符号
else
{
if (h%!=){f.push(a[i]);s.push(k);k=;d++;continue;}
if (h%==){k=k*+(a[i]-'');}
}
}
s2.push(k);
q=d;
while (q--) //导入另一个栈内使计算顺序正确(栈是后进先出)
{
s2.push(s.top());s.pop();
f2.push(f.top());f.pop();
}
while (d--)
{
g=;
if (f2.top()=='+'||f2.top()=='-') //把加减法放入另一个队列
{
f1.push(f2.top());
s1.push(s2.top());
f2.pop();
s2.pop();
b++;continue;
}
if (f2.top()=='*') //计算乘除法
{
x1=s2.top();s2.pop();
x2=s2.top();s2.pop();
s2.push(x1*x2);
f2.pop();continue;
}
if (f2.top()=='/')
{
x1=s2.top();s2.pop();
x2=s2.top();s2.pop();
s2.push(x1/x2);
f2.pop();continue;
}
}
s1.push(s2.top());
ans+=s1.front();s1.pop();
while (b--)
{
if (f1.front()=='+') //计算加减法
{
ans+=s1.front();
s1.pop();
f1.pop();continue;
}
if (f1.front()=='-')
{
ans-=s1.front();
s1.pop();
f1.pop();continue;
}
}
if (g==)printf("%0.2lf\n",ans); //g==1用来控制格式(可以去掉)
}
return ;
}
C——简单计算器(HDU1237)的更多相关文章
- 简单计算器--hdu1237(栈的运用)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 这是单纯的本题答案: #include<stdio.h> #define N 11 ...
- hdu1237 简单计算器[STL 栈]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu1237 题干 代码和解释 解本题时使用了STL 栈,要记得使用#include<stack>. 解本题时使用了isdigit()函 ...
- HDU1237 简单计算器 2016-07-24 13:34 193人阅读 评论(0) 收藏
简单计算器 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过 ...
- HDU1237 简单计算器 【栈】+【逆波兰式】
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 1.C#WinForm基础制作简单计算器
利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...
- 菜鸟学Android编程——简单计算器《一》
菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...
- PAT 06-1 简单计算器
想看一般简单计算器实现的看客不好意思了,这不是你想要点东西,此处题设为“只能进行加减乘除”.“都是整数”.”优先级相同“和"从左到右".此题来自PAT(http://www.pat ...
- php大力力 [005节] php大力力简单计算器001
2015-08-22 php大力力005. php大力力简单计算器001: 上网看视频,看了半天,敲击代码,如下: <html> <head> <title>简单计 ...
- PHP实现简单计算器
<!--简单的计算器--> <!DOCTYPE html> <html> <head> <title>PHP实现简单计算器</titl ...
- c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;
网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...
随机推荐
- Java故障定位方法总结
多线程并发,程序执行速度较快,使用简单断点不能够定位到出错的线程: 通过打印日志,不断精确定位故障的位置和导致故障的原因. 在断点处设置condition为Thread.currentThread() ...
- vue引用外部JS的两种种方案
前言 肯定会遇到没有npm化的库 自己写的js 方法 在Vue中该怎么引用呢 第一种 如果库是es6写的 就可以用import 引入 比如我自己写的http 封装接口的方法 就可以这样子导入哦 第二种 ...
- Bootstrap File Input 的使用
由于工作需要使用Bootstrap的FileInput插件,在此分享下插件的使用方法 直接上代码 fileinput.html <!DOCTYPE html> <html> & ...
- HBase的安装、配置与实践
本教程运行环境是在Ubuntu-64位系统下,HBase版本为hbase-1.1.2,这是目前已经发行的已经编译好的稳定的版本,带有src的文件是未编译的版本,这里我们只要下载bin版本hbase-1 ...
- Algorithm: 多项式乘法 Polynomial Multiplication: 快速傅里叶变换 FFT / 快速数论变换 NTT
Intro: 本篇博客将会从朴素乘法讲起,经过分治乘法,到达FFT和NTT 旨在能够让读者(也让自己)充分理解其思想 模板题入口:洛谷 P3803 [模板]多项式乘法(FFT) 朴素乘法 约定:两个多 ...
- DFS(深度优先搜索遍历有向图)-03-有向图-太平洋大西洋水流问题
给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度.“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界. 规定水流只能按照上.下.左.右四个方向流动,且只能从高 ...
- Ganglia安装及配置
Ganglia安装及配置root用户下yum安装所依赖的环境(实际生产环境都已安装)yum -y install apr-develapr-util check-devel cairo-devel p ...
- Map梳理
Map梳理 类型介绍 通用Map:用于在应用程序中管理映射,通常在 java.util 程序包中实现 HashMap.Hashtable.Properties.LinkedHashMap.Identi ...
- RocketMQ消息模型
rocketmq采用的是发布-订阅的模式,不需要每个消费者维护自己的消息队列,生产者将消息发送到topic,消费者订阅此topic 读取消息. 基本概念: 消息模型:消息模型包括producer,co ...
- 小白学Java:RandomAccessFile
目录 小白学Java:RandomAccessFile 概述 继承与实现 构造器 模式设置 文件指针 操作数据 读取数据 read(byte b[])与read() 追加数据 插入数据 小白学Java ...