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

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

下面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. Atitit paip.对象方法的实现原理与本质.txt

    Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...

  2. Atitit 基于图片图像 与文档混合文件夹的分类

    Atitit 基于图片图像 与文档混合文件夹的分类 太小的文档(txt doc csv exl ppt pptx)单独分类 Mov10KminiDoc 但是可能会有一些书法图片迁移,因为他们很微小,需 ...

  3. iOS-旧项目中手动内存管理(MRC)转ARC

    在ARC之前,iOS内存管理无论对资深级还是菜鸟级开发者来说都是一件很头疼的事.我参 加过几个使用手动内存管理的项目,印象最深刻的是一个地图类应用,由于应用本身就非常耗内存,当时为了解决内存泄露问题, ...

  4. vuejs学习网站推荐

    vuejs学习网站推荐 https://coligo.io/

  5. 3D touch在Unity3D中的使用

    0.开篇: 3D touch随着iOS9发布,它并不是一个单独的技术,而是可以分为pressure sensitivity.quick action以及peek&pop.在官方的介绍中提到可以 ...

  6. 提高 DHTML 页面性能

    联盟电脑摘要:本文说明了某些DHTML功能对性能的重大影响,并提供了一些提高DHTML页面性能的技巧. 目录 简介 成批处理DHTML更改 使用innerText 使用DOM添加单个元素 扩展SELE ...

  7. KlayGE 4.4中渲染的改进(一):只需要SM3的TBDR

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2736 KlayGE从4.0开始引入deferred rendering层(DR),并且这几个 ...

  8. xlat指令...

    ;就是一个串str1, lea ebx, str1 然后我们ebx+1总是加上的是一个字节, 无论(串是word, byte, dword) . .model flat .stack include ...

  9. JQuery Datatables服务器端处理示例

    HTML <table class="table table-striped table-bordered table-hover" id="table_repor ...

  10. Advice for students of machine learning--转

    原文地址:http://www.mimno.org/articles/ml-learn/ written by david mimno One of my students recently aske ...