额,题目是中文的,题意就不用说了= =都看懂喽。写个字符串先把这行计算式存进去,不过不能存一个算一个,因为考虑到乘除法比加减法优先的原则,如果是加号减号就先存着等待计算,如果是乘号除号就直接算出来值就好了。然后,就想到了栈的思想了,写两个栈一个存符号一个存数字,如果是加减号留在栈里,如果是乘除号就直接运算完,符号不再入栈,数字直接得出结果再存入,这样第一遍循环过后就只剩下加减法了,不过这时候还不能直接算,因为栈里再出来的话是反的= =所以再写两个栈出来,把之前的内容反过来再运算就能得到结果了。

表示一开始代码写乱了,然后乘法加法什么的混一块看的麻烦,懒得改所以又重写了一遍= =这一次写加上了注释,清楚多了,看来写注释很关键啊,至少改的时候好找位置......

下面AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
char s[];
stack<double>ds;
stack<char>mj;
stack<double>zs;
stack<char>hj; int main()
{
int len;
int i,j;
int sig;
double a,b;
double sum;
char c;
while()
{
gets(s);
if(strcmp(s,"")==)
break;
len=strlen(s);
for(i=;i<len;i++)
{
if(s[i]==' ')
continue;
//如果是加减法的话,先放进去,等着
else if(s[i]=='+'||s[i]=='-')
{
mj.push(s[i]);
}
//如果是乘除法的话,拉出前一个数进行计算
else if(s[i]=='*'||s[i]=='/')
{
if(s[i]=='*')
sig=;
else
sig=;
a=ds.top();
ds.pop();
b=;
for(i=i+;i<len;i++)
{
if(s[i]==' ')
break;
b=b*+(s[i]-'');
}
if(sig==)
{
a=a*b;
ds.push(a);
}
else
{
a=a/b;
ds.push(a);
}
}
else if(s[i]>=''&&s[i]<='')
{
a=;
for(;i<len;i++)
{
if(s[i]==' ')
break;
a=a*+(s[i]-'');
}
ds.push(a);
}
}
//如果还有没进行计算的数,进行一下计算
while(!ds.empty())
{
a=ds.top();
ds.pop();
zs.push(a);
}
while(!mj.empty())
{
c=mj.top();
mj.pop();
hj.push(c);
}
sum=zs.top();
zs.pop();
while(!hj.empty())
{
c=hj.top();
hj.pop();
a=zs.top();
zs.pop();
if(c=='+')
sum=sum+a;
else
sum=sum-a;
}
printf("%.2f\n",sum);
}
return ;
}

HDU 1237 简单计算器 栈的更多相关文章

  1. hdu 1237 简单计算器

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单计算器 Description 读入一个只包含 +, -, *, / 的非负整数计算表达式, ...

  2. hdu 1237 简单计算器(栈处理)

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. HDU 1237 简单计算器(栈+stringstream)

    提供几份代码,这题的输入可以用stringsteam处理,先处理乘除后处理加减,正常思路,但是后面统计加减法的时候,对栈的运用错了,我用的时候相当于给它多加了几个括号就错了. 正确的简单解法就是,加法 ...

  4. hdu 1237 简单计算器 (表达式求值)【stack】

    <题目链接> 题目大意: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值.  Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符, ...

  5. hdu-1237简单计算器(栈的运用)

    http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单的栈的运用. 首先将数字和运算符分离,分别保存在两个数组中,然后按原来的式子的顺序,首先将第一个数和第 ...

  6. hiho #1332 : 简单计算器 栈+递归

    #1332 : 简单计算器 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 编写一个程序可以完成基本的带括号的四则运算.其中除法(/)是整除,并且在负数除法时向0取整.( ...

  7. hdoj 1237 简单计算器

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  8. F - 简单计算器(栈)

    F - 简单计算器 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descripti ...

  9. HDU1237 简单计算器 栈

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目大意:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 题目分 ...

随机推荐

  1. paip.解决access出现 -2147467259 无效的参数量

    paip.解决access出现 -2147467259   无效的参数量 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http: ...

  2. C#学习系列-.NET体系结构

    .NET框架概述 .NET 框架为.NET应用程序运行提供虚拟机环境,为.NET应用程序提供编译.运行.内存管理.垃圾回收.安全等服务.   .NET框架组成部分 1.公共语言运行时(Common L ...

  3. Python中的__new__和__init__

    Python中的__new__和__init__ 写了这么多的class,现在才知道还有个__new__方法, 那么它和__init__有什么区别呢? class TestCls(): "& ...

  4. KnockoutJS 3.X API 第三章 计算监控属性(3) KO如何实现依赖追踪

    KO是如何实现自动更新的 初学者可以掠过该篇,如果你是一个刨根问底的开发者,那本节将告诉你KO是如何实现依赖追踪和UI自动更新的. 其实很简单,KO的依赖追踪算法如下: 当你声明一个计算监控属性,KO ...

  5. 快速入门系列--Log4net日志组件

    Log4net是阿帕奇基金会的非常流行的开源日志组件,是log4j的.NET移植版本,至今已经有11年的历史,使用方便并且非常稳定,此外很重要的一点是其和很多开源组件能很好的组合在一起工作,例如NHi ...

  6. 在SQL Server中添加供应用程序使用的帐号

        在之前客户咨询案例中,很多客户应用程序连接SQL Server直接用的就是SA帐号.如果对数据库管理稍微严格一点的话,就不应该给应用程序这种权限,通常应用程序只需要进行增删改查,而很少有DDL ...

  7. SQL Pass北京举办第10次线下活动,欢迎报名

    活动主题: 探讨真实世界中的复制(第二季)与Windows Azure SQL Database内幕 地点:北京微软(中国)有限公司[望京利星行],三层308室 时间:2013年 9 月28日 13: ...

  8. Windows 系统下Git安装图解

    简单来说Git是一个免费的.开源的版本控制软件,从功能上讲,跟我们比较熟悉的Subversion(SVN)这类版本控制软件没什么两样.由于工作的需求,需要在WinXP下安装git配合团队完成相应的工作 ...

  9. haslayout详解

    定义 haslayout是IE7-浏览器的特有属性.hasLayout是一种只读属性,有两种状态:true或false.当其为true时,代表该元素有自己的布局,否则代表该元素的布局继承于父元素. [ ...

  10. Oracle常见错误

    1. Oracle无法动态注册 在SQL*PLUS下多次输入alter system register.监听器的状态始终显示为The listener supports no services. 可查 ...