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 ...
随机推荐
- 机器学习-Tensorflow之Tensor和Dataset学习
好了,咱们今天终于进入了现阶段机器学习领域内最流行的一个框架啦——TensorFlow.对的,这款由谷歌开发的机器学习框架非常的简单易用并且得到了几乎所有主流的认可,谷歌为了推广它的这个框架甚至单独开 ...
- mysql-cluster集群搭建步骤
1.从官网下载mysql-cluster安装包: https://dev.mysql.com/downloads/cluster/ 2.解压安装包 #上传到服务器目录/usr/softwares并解压 ...
- Distance dependent Chinese Restaurant Processes
Here is a note of Distance dependent Chinese Restaurant Processes 文章链接http://pan.baidu.com/s/1dEk7ZA ...
- 人生需要Plan B
天有不测风云,人有祸兮旦福.2020年,刚打开就是地狱模式! 武汉加油,中国加油! 新冠状肺炎的强传播性,让人们不得不乖乖待在家,工地开不了工,白领不能上班,农村封村,城市封小区.人们每天在一个小范围 ...
- (5千字)由浅入深讲解动态规划(JS版)-钢条切割,最大公共子序列,最短编辑距离
斐波拉契数列 首先我们来看看斐波拉契数列,这是一个大家都很熟悉的数列: // f = [1, 1, 2, 3, 5, 8] f(1) = 1; f(2) = 1; f(n) = f(n-1) + f( ...
- VS debug下为什么多此一举jmp函数地址?
VS debug下为什么call 函数后,会jmp函数地址?多此一举? http://blog.csdn.net/viper/article/details/6332934 在写跑在main之前的时候 ...
- Codeforces_839
A.每天更新判断. #include<bits/stdc++.h> using namespace std; ]; int main() { ios::sync_with_stdio(); ...
- Codeforces_442_A_枚举
http://codeforces.com/problemset/problem/442/A 想想成5*5的图,一共能划10条线,枚举2^10次即可. 判断每种情况是否符合条件的方法,若存在点,被线穿 ...
- UVA5913 Dictionary Sizes(字典树)(转载)
题目大意:给出n个旧单词,要从这n个旧单词中构造新单词.构造条件是 S = Sa + Sb,其中Sa为某个旧单词的非空前缀,Sb为某个单词的非空后缀.求所有的新单词和旧单词中有多少个不同的单词. 思路 ...
- 一口气说出Redis 5种数据结构及对应使用场景,面试要加分的
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...